2020/03/08

[golang] testを書こう

単体テストというかユニットテストというか、とにかくそういうのを序盤から書いていかないと、後からまとめて書くのはつらい。
テストを作っておくと、書き換えたいときも精神的負担が少ないしね。

 

testing - The Go Programming Language
https://golang.org/pkg/testing/

テストって言うと、どうしても夢のような機構が存在することを期待してしまう。
テストコードを書かなくてもそれっぽいテストコードを自動で書いてくれないだろうか、とか。
とかというか、それしかないが。

もちろん、そういうものはgolangにもない。
あるのは、テストコードがしくみとして考慮されている、ということか。

  • テストしたいファイルの名前は、後ろに"_test.go"にする
  • テストのsignatureは、TestXxx(t *testing.Test)
  • NGルートはt.Errorf()みたいな感じで終わらせる
    • Skip()などもあるらしい

 

raw_test.go

01: package pcd_test
02: 
03: import (
04:     "bytes"
05:     "testing"
06: 
07:     "github.com/hirokuma/go_pasori370/pcd"
08: )
09: 
10: func TestRawEncode(t *testing.T) {
11:     var msg pcd.RawMsg
12: 
13:     msg.Cmd = 0x18
14:     msg.Data = []uint8{0x01}
15:     data := pcd.RawEncode(&msg)
16: 
17:     model := []uint8{
18:         0x00, 0x00, 0xFF, 0x03, 0xFD, 0xD4, 0x18, 0x01, 0x13, 0x00,
19:     }
20:     if bytes.Compare(model, data) != 0 {
21:         t.Fatalf("not same")
22:     }
23: }
  

src/github.com/hirokuma/go_pasori370/pcd$ go test .
ok      github.com/hirokuma/go_pasori370/pcd    0.002s
src/github.com/hirokuma/go_pasori370/pcd$ go test .
ok      github.com/hirokuma/go_pasori370/pcd    (cached)
src/github.com/hirokuma/go_pasori370/pcd$ go clean -testcache
src/github.com/hirokuma/go_pasori370/pcd$ go test .
ok      github.com/hirokuma/go_pasori370/pcd    0.003s

1つ上のディレクトリからだと、こう。

src/github.com/hirokuma/go_pasori370$ go test ./...
?       github.com/hirokuma/go_pasori370/cmd    [no test files]
?       github.com/hirokuma/go_pasori370/dev    [no test files]
ok      github.com/hirokuma/go_pasori370/pcd    0.003s

ちなみに、"./..."じゃなくて"..."とすると、golangの大元からテストするようだ。

 

いくつかわかったこと。

  • _test.goのパッケージ名は、オリジナルと同じか、後ろに_testをつけるのが一般的か
    • オリジナルと同じだとimportがいらん
    • 外部から使ったのと同じようにしたいなら、_testを付けるのがいいのかな
  • _test.goのオリジナルにある関数を全部テスト関数にしなくても怒られない
    • -vつけてリストを出すしかないか
    • -coverで漏れたところを感じとるのがよいのかなぁ
  • テストの結果はキャッシュされる
    • go clean -testcache
  • テストとは関係ないが、配列やsliceの固定値は定義できない
    • 全部RAMに展開するということか

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。