「Go言語(golang)」カテゴリーアーカイブ

Go言語でユニットテストを書く方法

先日の、Go言語でパッケージを作成して世界に公開する方法で作成したコードのユニットテストを書いてみたいと思います。こちらも公式の動画を元にした記事です。英語がダメな人はこのブログを読むといいよ。

あまり、$GOROOT/src/pkg以下のソースコードをいじる人も居ないと思いますが、俺色々変更しちゃったよー!って人のために、魔法のコマンドを教えておきましょう。以下のコマンドを実行すると、すでに取得済みのパッケージであってもリポジトリの最新の状態にすることができます。念の為に叩いておきましょう。

$ goinstall github.com/ddddaisuke/mytools

ソースコードがあるディレクトリに移動して、以下のmytools_test.goを作成します。

$ cd go/src/pkg/github.com/dddaisuke/mytools/
$ vi mytools_test.go

package mytools

import "testing"

func TestReverse(t *testing.T) {
	i := "ABCD"
	o := Reverse(i)
	e := "DCBA"
	if o != e {
		t.Errorf("%q expected %q got %q", i, e, o)
	}
}

mytools_test.goが作成できたら以下のコマンドでテストを実行します。Makefileは特に変更する必要がありません。

$ make test

色々出力されますが、最後にPASSと表示されていればテストに成功したと言うことです。テストか元のプログラムのどちらかを変更して失敗パターンも確認しておく事をオススメします。

次に、ユニットテストと言えば、やはり複数のテストケースを確認したいと思います。その場合には、以下のように書きます。

package mytools

import "testing"

type ReverseTest struct {
	in, out string
}

var ReverseTests = []ReverseTest {
	ReverseTest{"ABCD", "DCBA"},
	ReverseTest{"Hello, 世界!", "!界世 ,olleH"},
}

func TestReverse(t *testing.T) {
	for _, r := range ReverseTests {
		o := Reverse(r.in)
		if r.out != o {
			t.Errorf("%q expected %q got %q", r.in, r.out, o)
		}
	}
}

先ほどと同じように、make testコマンドでPASSと表示されればOKです。

$ make test

■ベンチマークの取り方

最後にGoogleと言えば、やはり速度ですから、ベンチマークを忘れてはイケマセン。Go言語ではベンチマークも簡単に取ることができます。

package mytools

import "testing"

type ReverseTest struct {
	in, out string
}

var ReverseTests = []ReverseTest {
	ReverseTest{"ABCD", "DCBA"},
	ReverseTest{"Hello, 世界!", "!界世 ,olleH"},
}

func TestReverse(t *testing.T) {
	for _, r := range ReverseTests {
		o := Reverse(r.in)
		if r.out != o {
			t.Errorf("%q expected %q got %q", r.in, r.out, o)
		}
	}
}

func BenchmarkReverse(b *testing.B) {
	s := "ABCD"
	for i := 0; i< b.N; i++ {
		Reverse(s)
	}
}

ファイルの修正が終わったら、テストの時と違い、make benchコマンドでベンチマークを取ることができます。

$ make bench

以下のようにPASSの後にベンチマークの結果が出力されます。この記事書いてて思いましたが、すごく簡単ですね!

  :
  :
PASS
mytools.BenchmarkReverse	 5000000	       378 ns/op

Go言語でパッケージを作成して世界に公開する方法

 Go言語では簡単に独自のパッケージを作成する事ができます。とは言え、作業方法が分からなければどうしようもないのですが、中の人が親切にも動画を用意してくれています。英語が分からない人はこのブログを読むといいよ。

 ここでは、文字列をひっくり返すという簡単なサンプルコードを例にパッケージ化作業を進めて行きます。
続きを読む Go言語でパッケージを作成して世界に公開する方法

Go言語のインストール

Macへのインストール方法を書いていきますが、Linuxでも一緒だと思います。必要なものは以下の通り。

  • GCC
  • 標準Cライブラリ
  • Bison
  • make
  • awk
  • ed

Macの場合、Xcodeをインストールするだけで、必要なものはすべて入ります。

Ubuntu/Debianなら、sudo apt-get install bison ed gawk gcc libc6-dev makeこんな感じでok。
続きを読む Go言語のインストール