1. ホーム
  2. unit-testing

[解決済み] Go の testing パッケージを使用してテストのセットアップを行うにはどうすればよいですか?

2022-05-28 14:43:39

質問

を使用する際、全てのテストの舞台となる全体的なテスト設定処理を行うにはどうしたらよいでしょうか。 テストパッケージ ?

Nunit の例としては [SetUp] 属性があります。

[TestFixture]
public class SuccessTests
{
  [SetUp] public void Init()
  { /* Load test data */ }
}

どのように解決するのですか?

Go 1.4 からは setup/teardown を実装することができます (テストの前後に関数をコピーする必要がありません)。ドキュメントの概要は以下のとおりです。 ここで の中にあります。 メイン セクションの

TestMainはメインゴルーチンの中で実行され、m.Runの呼び出しの周りで必要なセットアップとティーダウンを行うことができます。 m.Run.TestMainの呼び出しの前後で、必要なセットアップとティアダウンができます。そして、m.Runの結果を用いて os.Exitをm.Runの結果と共に呼び出す必要があります。

これが、もしテストが関数 func TestMain(m *testing.M) を含む場合、テストを実行する代わりにこの関数が呼び出されることを意味します。そして、この関数の中で、テストがどのように実行されるかを定義することができます。例えば、私はグローバルセットアップとティアダウンを実装することができます。

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

他の例 はここで見つけることができます .

<ブロッククオート

最新のリリースでGoのテストフレームワークに追加されたTestMain機能は、いくつかのテストのユースケースに対するシンプルなソリューションです。 は、いくつかのテストのユースケースに対するシンプルなソリューションです。TestMain は、セットアップとシャットダウンを行うためのグローバルフックを提供し、テスト環境を制御します。 テスト環境の制御、子プロセスでの異なるコードの実行、またはテスト コードから漏れたリソースのチェックなどです。 テストコードから漏れたリソースをチェックします。ほとんどのパッケージでは ほとんどのパッケージは TestMain を必要としませんが、 必要になったときのためには歓迎すべき追加機能です。 しかし、必要な時のための歓迎すべき追加機能です。