2013年12月21日(Sat) 公園で子どもたちと鬼ごっこ [長年日記]
● [golang] Goのテストツール
GoとC++で作るB木シリーズ。やっとこgo testでB木のテストが動いたので今日はgo testの動作を掘り下げてみた。 go testでは*_test.goのテストケースが実行される。 テストされるコードは、 *.goから読まれたうちの、packageの記述が合っているもののようだ。 そして、テストケース内の名前空間は、 テストされるコードの名前空間と同じみたい
してみると「Go is a tool for managing Go source code.」 サブコマンドとしては、build、clean、…、testなどがあるとのこと。
あー。だからバイナリとかカレントディレクトリには見えなかったのか。
実行される側のソースコードはどういう風になってるんだろう。 普通のGoプログラムは実行を始める場所に package mainを記述してfunc main()を 定義しないといけないようだけれど、btree_test.goにはどちらも無い。 代わりに、package btreeという記述がある。 これは、btree.goというファイル名に対応してるのかな? それともbtree.go内のpackage btreeという記述に対応してるのかな? 試してみる。
最低限packageの行があれば実行はできるようだ。 もう少し何かを実行してもらうには…zunuda_test.goに内容を下記のようにすると
下記のように実行された。 カレントディレクトリには他のファイルは置いていない。
package zundaの行はどのように活用されるのかな。 Pythonみたいにパッケージ名とファイル名を一致させる必要があるのかな。 とりあえずzunda.goにpackage zundaを書いてみる:
packageが一致してると呼び出し元からは指定する必要はないようだ。 zunda_test.goを下記のようにして
go testすると「Hello World」が表示されるが、 Greet()をzunda.Greet()とすると
となる。ではファイル名を変えてみると…
ファイル名は関係なく、 *.goからpackage zundaを頼りにコードを読んでるようだ。
蛇足。importの時はファイル名とpackageとどちらを気にするのかな。 greet.goを用意して:
あれ、8gもgccgoもないよ?gccgoをapt-get installしました。
おや。zundaをimportできるようにするにはどうするんだ? というかpackage mainがカレントディレクトリにあると go testもうまくいかなくなるのだね。
Goのパッケージ?のつくりかたについて勉強する必要がありそうですね。
最近のツッコまれどころ