golang

気づいたらThe Go PlaygroundでTest & Exampleが出来るようになっていた

notice-the-go-playground-test-example-can-run-eyecatch

どうも。golang大好きなつじたくです。

昔からちょこちょこっとしたgolangのソースコードはThe Go Playground

書いたりしていたのですが

いつのまにかThe Go PlaygroundでTestコードやExampleコードが書きやすくなっていたので、

今回はそのことについて書きたいと思います。

Testコードの書き方

このissueでThe Go Playground上のテストコードが書きやすくなりました。

issueのコメントを確認すると

* If main is not present and there is an appropriate test function (or example function
with output), then the playground executes in test mode. Otherwise, behavior is
unchanged.
* "Test mode" is equivalent to `go test -v`.

と書かれています。

要するに

  • main関数は書かなければテストモードになって、テストを実行するよ!
  • 実行されるテストは`go test -v`と同じだよ!

と言っているようです。

早速書いてみました。

package main

import "testing"

func Sum(a, b int) int {
	return a + b
}

func TestSum(t *testing.T) {
	if Sum(1, 1) != 2 {
		t.Error("oh my gott")
	}
}

===========実行結果===========
=== RUN   TestSum
--- PASS: TestSum (0.00s)
PASS

https://play.golang.org/p/6MEyPsVd1Kt

キチンとテストコードが実行されてますね!

簡単なテストコードならThe Go Playground上でかけそうな気がします。

ちなみにgolangでテストコードを書くなら下記のパッケージがオススメなのでぜひ使ってみてください!

golang-testcode-write-gotests-eyecatch
golangでテストコード書くならgotestsパッケージを使うのもいいかもgolang大好きエンジニアのつじたくです。 みなさんテストコード書いてますか?本当は書いたほうがいいことはわかってるけど ...

Exampleコードの書き方

Exampleコードに関してはこのissueで対応したようですね。

issueを確認すると前はエラー等になっていたようですが、現在コードを書いてみると

package main

import (
	"fmt"
)

func ExampleHello() {
	fmt.Println("hello")
	// Output: hello
}

func ExampleSalutations() {
	fmt.Println("hello, and")
	fmt.Println("goodbye")
	// Output:
	// hello, and
	// goodbye
}

==========実行結果==========
=== RUN   ExampleHello
--- PASS: ExampleHello (0.00s)
=== RUN   ExampleSalutations
--- PASS: ExampleSalutations (0.00s)
PASS

https://play.golang.org/p/TpTDfveJaUH

Exampleコードも問題なく実行されました!

Benchコードは書けないみたい

つじたく
つじたく
benchコードはThe Go Playgroundで書けへんの?

はい。気になったので調べました。

こちらを見ると

If the program contains tests or examples and no main function, the service runs the tests. Benchmarks will likely not be supported since the program runs in a sandboxed environment with limited resources.

 

こちらのissueにも

Tests and examples are supported, but not benchmarks. (Benchmarks are going to
unreliable anyway, right?)

と書かれておりbenchコードには対応していないのではないでしょうか

golang/goのissueを眺めていたのですがThe Go Playgroundのbenchコードに関するissueは特に見当たりませんでした。(見逃している可能性もありますが・・・)

そもそもbenchコードなのでThe Go Playground上で実行しても意味がないような気が・・・

個人的にはTestコード書けるだけで満足。

まとめ

要点

Testコード・Exampleコードは実行可能

Benchコードは(今のところ)実行できないみたい

という感じでした。

簡単なコードならThe Go Playground上で書いて実行してみるのもいいかもしれません。

※追記

The Go Playgroundが外部importにも対応しました。

the-go-playground-support-third-party-imports-eyecatch
The Go Playgroundが外部import対応したよ!どうも。golang大好きなつじたくです。 先日気づいたらThe Go PlaygroundでTest&Exampleが出来るよう...