web-dev-qa-db-ja.com

進行中の各テストのテストのセットアップと分解

Go "testing"パッケージを使用しています。以下のようにテストを実行します。

func TestMain(m *testing.M) {

   ...
   // Setup
   os.Exit(m.Run())
   // Teardown
}

これにより、テストが実行される前にセットアップが実行され、すべてのテストが完了した後にティアダウンが実行されます。セットアップでDBがセットアップされるので、これが必要です。しかし、また、テストごとのセットアップ/分解を実行する方法を見つける必要があります。私が実行している単体テストでは、すべてのテストの前にDBをクリアして、予期しない動作を引き起こすDBのコンテンツに問題がないようにします。

17
Virtually Real

Kare Nuorteva の記事「 Goユニットテストのセットアップとティアダウン 」に示すように、...を返すセットアップ関数を使用して、ティアダウン関数を延期することができます。

this Gist を参照してください:

func setupSubTest(t *testing.T) func(t *testing.T) {
    t.Log("setup sub test")
    return func(t *testing.T) {
        t.Log("teardown sub test")
    }
}

セットアップ関数は、ティアダウンの定義と返送を担当します。

たとえば、テーブル駆動のテストシナリオの各テストに対して:

for _, tc := range cases {
    t.Run(tc.name, func(t *testing.T) {
        teardownSubTest := setupSubTest(t)
        defer teardownSubTest(t)

        result := Sum(tc.a, tc.b)
        if result != tc.expected {
            t.Fatalf("expected sum %v, but got %v", tc.expected, result)
        }
    })
}
17
VonC

関数subTestSetup、subTestおよびsubTestTeardownのテーブルを使用して、構造体のdb接続/その他の共通項目を渡すことを検討できます(subTestSetupはこの構造体を返すことができます)。セットアップの一部/一部を再利用したり、さまざまな機能で分解したり、テスト要件の増加に応じてこのモジュールを維持したりできます。 subTestを呼び出す前にdefer subTestTeardown()を呼び出して、subTestに問題がある場合でもティアダウンコードが実行されるようにします。

0
Ravi