Help us understand the problem. What is going on with this article?

はじめてのgo test

More than 1 year has passed since last update.

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の説明も交えつつ、
より実践的な内容を書きたいと思います。

参考

marnie_ms4
https://twitter.com/marnie0301 ゆるふわWeb・iOSエンジニア golang,PHP,Java,Objective-C,Javascript,Rubyなど swiftは業務で使うことはなかった...
https://twitter.com/marnie0301
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした