0Pricing
Go Academy · レッスン

testingによるユニットテストの作成

TestXxx関数、t.Error、t.Fatal、t.Helper

「testingによるユニットテストの作成」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

testing パッケージ

Go に組み込まれている testing パッケージには、ユニットテストに必要なものがすべて用意されています。テスト関数、失敗の報告、テストバイナリなどが含まれ、外部フレームワークは必要ありません。

テスト関数のシグネチャ

テスト関数は Test で始まり、*testing.T を受け取り、_test.go で終わるファイルに置く必要があります。

func TestAdd(t *testing.T) {
    got := Add(2, 3)
    if got != 5 {
        t.Errorf("Add(2,3) = %d; want 5", got)
    }
}

t.Error と t.Fatal

t.Error は失敗を記録して処理を続けます。一方、t.Fatal は失敗を記録し、現在のテストを直ちに停止します。後続のアサーションが失敗したアサーションに依存する場合は Fatal を使用してください。

テストの実行

すべてのテストを実行するには go test ./... を使用します。特定のテストを実行するには go test -run TestAdd を使用します。詳細な出力を表示するには -v を追加してください。

go test -v -run TestAdd ./...

t.Helper

アサーションヘルパーに t.Helper() を付けると、エラーメッセージにヘルパーの行ではなく、呼び出し側の行が表示されます。

func assertEqual(t *testing.T, got, want int) {
    t.Helper()
    if got != want {
        t.Errorf("got %d; want %d", got, want)
    }
}

TestMain

TestMain(m *testing.M) は、テストスイート全体の実行前後にセットアップや後片付けを行うための任意のエントリーポイントです(テスト用データベースの起動など)。

func TestMain(m *testing.M) {
    setup()
    code := m.Run()
    teardown()
    os.Exit(code)
}

t.Run によるサブテスト

関連するケースを t.Run でグループ化します。各サブテストは独立して実行され、-run TestFoo/SubcaseName で対象を指定できます。

func TestMath(t *testing.T) {
    t.Run("addition", func(t *testing.T) { /* ... */ })
    t.Run("subtraction", func(t *testing.T) { /* ... */ })
}

テストファイルの構成

同じパッケージのテストからは、非エクスポート識別子にアクセスできます。_test パッケージのテスト(ブラックボックステスト)からは、エクスポートされた識別子にのみアクセスできます。

// white-box: package mylib
// black-box: package mylib_test

go test -cover

go test -cover を使ってコードカバレッジを測定できます。詳細な HTML レポートを生成するには、go test -coverprofile=c.out ./... && go tool cover -html=c.out を実行します。

インターフェースを使ったテスト

実際のサービスを起動せずに偽の実装を渡せるよう、インターフェースに対してコードを設計してください。

t.Parallel

テストの開始時に t.Parallel() を呼び出すと、他の並列テストと安全に同時実行できるテストとしてマークされ、テストスイートを高速化できます。

func TestRead(t *testing.T) {
    t.Parallel()
    // ...
}

クイックチェック

t.Error と t.Fatal の違いは何ですか?

振り返り:testing によるユニットテスト

主なポイント:

  • テスト関数:_test.go ファイル内の TestXxx(t *testing.T)
  • t.Error は処理を続け、t.Fatal はテストを停止する
  • ヘルパーのエラー行番号を正しく表示するには t.Helper()
  • サブテストには t.Run、並列テストには t.Parallel

よくある質問

「testingによるユニットテストの作成」レッスンは無料ですか?

はい。「testingによるユニットテストの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「testingによるユニットテストの作成」で何を学びますか?

TestXxx関数、t.Error、t.Fatal、t.Helper ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「testingによるユニットテストの作成」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. testingによるユニットテストの作成
  2. テーブル駆動テスト
  3. テストダブル:モックとスタブ
  4. テストカバレッジとtestify
← Go Academyに戻る