LoginSignup
142
102

More than 5 years have passed since last update.

はじめてのgo test

Last updated at Posted at 2017-03-28

ReadMeFirst

こんにちは @marnie_ms4 です。
筆不精で、今まではブログを書いては放置したりばかりだったのですが、
業務でgoを使っているので、golangについて記事を書き溜めていこうと思います。
(主に自分の備忘的なところもありますが)

さて、golangでは自動テストを標準でサポートしています。
なにはなくとも言語を使う上でテストコードは必須ですよね。
ということで、この記事ではテストの実行や作り方について記載します。

テストの作り方

testファイルは ****_test.go という命名で作成します。

  • example.go
example.go
package main

import (
    "errors"
)

func example(code string) (int,error) {
  if code == "hoge" {
       return 1,nil
  }
  return 0,errors.New("code must be hoge")
}
  • example_test.go

testing packageの以下に従って作成します。

To write a new test suite, create a file whose name ends _test.go that contains the TestXxx functions as described here. 
example_test.go
package main

import (
    "testing" // テストで使える関数・構造体が用意されているパッケージをimport
)

func TestExampleSuccess(t *testing.T) {
    result, err := example("hoge")
    if err != nil {
        t.Fatalf("failed test %#v", err)
    }
    if result != 1 {
        t.Fatal("failed test")
    }
}

func TestExampleFailed(t *testing.T) {
    result, err := example("fuga")
    if err == nil {
        t.Fatal("failed test")
    }
    if result != 0 {
        t.Fatal("failed test")
    }
}

実行

go test go test -run でテストが行えます。

go test packagePath  # cf. go test github.com/hoge/moge パッケージを指定
go test -run ''      # カレントディレクトリ内の全てのテストを実行
go test -run Foo     # Fooを含むテスト関数を実行

testing package より。
go test -helpでオプションを確認可能。

再帰的に行いたい場合は以下など便利。

go test -v hoge/... # hoge/以下のテストを実行
go test ... # GOPATH以下全てテストしようとするので終わらないので注意

実行すると

$ go test -run ""
PASS
ok      playground_/moge    0.794s

まとめ

こんな感じでテストを書いたり、実行する事ができます。
他に

  • BenchMark用のテストユーティリティやパッケージも用意されている
  • 標準でassertionがない
  • subTest,tableDrivenTest
  • -parallel nによる並列実行

など書きたいことがありますので、別記事でtesting packageの説明も交えつつ、
より実践的な内容を書きたいと思います。

参考

142
102
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
142
102