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

Goのテストの動かし方

More than 1 year has passed since last update.

Goは言語標準でテスト機能を備えてるので、その使い方。

参考記事:https://qiita.com/marnie_ms4/items/e51cc6d879cc9ad07af3

プロダクトコード

gopherという文字を返すだけの機能。メイン関数はただのハロワ(無視して)。

hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world!\n")

    a := "aaa"
    fmt.Printf("1:" + a + "\n")
    a = "AAA"
    fmt.Printf("2:" + a + "\n")

    const b = "bbb"
    fmt.Printf("3:" + b + "\n")

    var s = "string"
    fmt.Printf("4:" + s + "\n")
}

func getGopher() string {
    return "gopher"
}

テストコード

〜_test.go というファイル名のソースファイルを検出してテストしてくれるので、ファイル名をhello_test.goとする。ファイルはhello.goと同じ場所とした。

取得した文字がgopherであることをテストする機能。

hello_test.go
package main

import "testing"

func TestGetGopher(t *testing.T) {
    s := getGopher()
    if s != "gopher" {
        t.Fatal("not gopher")
    }
}

テストメソッドはTest〜と命名するのがルール。別の命名規則だとテストが実行されない(無視される)。Test〜の後ろ側の名前は、必ずしもテスト対象のプロダクトコードのメソッドと同じである必要はない。

引数tはテスト用オブジェクトが渡される。t.Fatal("〜")でNGケースとして判定した場合の、エラー出力を実行している。OKケースならロジックを最後まで通過する。なお、この引数の宣言がないとコンパイルエラーになる。

テスト実行方法

  1. プロダクトコードのビルド

    $ go build hello.go
    
  2. テスト実行

    $ go test -run ''
    
  3. テスト結果(OKだった場合)

    PASS
    ok      _/〜〜〜/src/hello        0.007s
    
  4. テスト結果(NGだった場合(!= を == にしてNGケースを確認))

    --- FAIL: TestGetGopher (0.00s)
            hello_test.go:8: not gopher
    FAIL
    exit status 1
    FAIL    _/〜〜〜/src/hello        0.007s
    

感想

  • テストのファイル名とか、言語仕様で決まってるあたりが、考えるコストが減って非常に楽だった
  • 言語標準でテストをサポートしてるのは嬉しい
mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
https://mediado.jp
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