2016-07-21 40 views
0

gtestgmockを私のアプリケーションで使用しており、gtestSetup()Teardown()関数の目的を理解できませんでした。 私の理解によると、それぞれTEST_F実行前に関数が呼び出され、最後にTeardown()が呼び出されます。同じ目的で::testing::Testクラスconstructordestructorを使用できますか?これらの機能が正確にどこで使用されていますか?TearDown()とSetup()関数の利点は何ですか?

答えて

1

これらの機能を使用して、すべてのテストケースで共有される特定の状態のリソースを確立できます。特に、テストケースに例外が含まれている場合。

をあなたはまだ、次まれにセットアップ()/ティアダウン()を使用することもできます。:

  • ティアダウン動作が投げることができればそれは言われています彼らのdocumentationから

    例外では、デストラクタをスローすると未定義の動作が発生し、通常はすぐにプログラムが終了するため、デストラクタとは対照的にTearDown()を使用する必要があります。コンパイラで例外が有効になっていると、多くの標準ライブラリ(STLなど)がスローされる可能性があることに注意してください。したがって、例外の有無にかかわらず動作する移植可能なテストを作成する場合は、TearDown()を使用することをお勧めします。

  • フラグが指定されている場合、アサーションマクロは例外をスローします。したがって、このフラグを使用してテストを実行する場合は、デストラクタでGoogle Testアサーションを使用しないでください。
  • コンストラクタまたはデストラクタでは、このオブジェクトに対して仮想関数呼び出しを行うことはできません。 (仮想として宣言されたメソッドを呼び出すことはできますが、静的にバインドされます)。したがって、派生クラスでオーバーライドされるメソッドを呼び出す必要がある場合は、SetUp()/TearDown()を使用する必要があります。
+0

例を挙げてください。リソースをテストクラスに追加して共有できますか?リソースがテストクラスの一部であれば、それはテスト関数間で共有されるでしょう、そうですか? –

+0

3番目の点は、TEST_F関数からSetUp()とTearDown()関数を呼び出すことができるということですか?私は第3のポイントを理解することができませんでした。 –

+0

@GilsonPJ 'virtual'関数を呼び出すには、テストクラスの完全に構築されたオブジェクトインスタンスが必要です。これらは、コンストラクタ本体の内部では実行できません。 –

関連する問題