0Pricing
Go Academy · レッスン

テストカバレッジとtestify

go test -coverとtestifyアサーションライブラリ

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

go test -cover

任意の go test コマンドに -cover を追加すると、各パッケージのカバレッジ率が表示されます。

go test -cover ./...
// ok  myapp 68.4% of statements

カバレッジプロファイル

カバレッジプロファイルファイルを生成して HTML として表示すると、どの行がカバーされているかを確認できます:

go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.html

CI でのカバレッジしきい値

シェルのワンライナーで最低カバレッジを適用します:

pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }

100% のカバレッジが目標ではない

カバレッジが測定するのは実行された行であり、アサーションに意味があるかどうかではありません。重要な処理経路では高いカバレッジを目指し、到達不能なエラーブランチでは低いカバレッジを許容してください。

testify/assert

github.com/stretchr/testify/assert は、期待値と実際の値を自動的に報告する、読みやすいアサーションを提供します:

assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)

testify/require

require は assert と同じですが、失敗時に t.FailNow() を呼び出して、テストを直ちに停止します(t.Fatal と同様です)。

require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is nil

testify/suite

testify/suite は、xUnit テストスイートと同様に、共有のセットアップや後片付けを行う構造体に関連するテストをまとめます:

type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }

assert.ElementsMatch

順序を考慮せずにスライスを比較します:

assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})

assert.JSONEq

キーの順序に関係なくJSON文字列を比較します:

assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)

カスタムアサーション

testifyを独自のアサーションヘルパーでラップし、失敗メッセージにドメイン固有のコンテキストを追加します:

func assertUserValid(t testing.TB, u *User) {
    t.Helper()
    assert.NotEmpty(t, u.Name)
    assert.Positive(t, u.ID)
}

カバレッジとtestifyの組み合わせ

testifyはカバレッジのレポートに影響しません。カバレッジでは、使用したアサーションライブラリに関係なく、行が実行されたかどうかだけが評価されます。

クイックチェック

testify/assertとtestify/requireの違いは何ですか?

まとめ: カバレッジとtestify

重要事項:

  • go test -cover; -coverprofileでHTMLレポートを生成します
  • assertは失敗しても続行し、requireは失敗すると停止します
  • 共有セットアップを使用するグループ化されたテストにはtestify/suiteを使います
  • 高いカバレッジは有益ですが、意味のあるアサーションのほうが重要です

よくある質問

「テストカバレッジとtestify」レッスンは無料ですか?

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

「テストカバレッジとtestify」で何を学びますか?

go test -coverとtestifyアサーションライブラリ ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「テストカバレッジとtestify」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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