0

cppunit ユニットテストを dll としてビルドし、それを TestPlugInRunnerd.exe にロードして結果を表示します。私たちは独自のモックを作成していますが、gmock などのモック フレームワークの使用を開始したいと考えています。

私は gmock をダウンロードし、問題なくリンクしました。gmock を使用してモックを作成しましたが、正常にコンパイルされます。しかし、その後、gmock faq で次のことを読みました。

テスト フレームワークとして Google Test 以外のもの (CppUnit や CxxTest など) を使用する場合は、前のセクションの main() 関数を次のように変更します。

int main(int argc, char** argv) {
  // 次の行により、Google Mock は失敗時に例外をスローします。
  // これは、テスト フレームワークによってテストの失敗として解釈されます。
  ::testing::GTEST_FLAG(throw_on_failure) = true;
  ::testing::InitGoogleMock(&argc, argv);
  ... テスト フレームワークが必要とするものは何でも ...
}

このアプローチには問題があります。Google Mock がモック オブジェクトのデストラクタから例外をスローすることがあります。一部のコンパイラでは、これによりテスト プログラムがクラッシュすることがあります。テストが失敗したことはまだわかりますが、正常な失敗ではありません。

私は明らかにメインを持っていません。gmock を dll で動作させるにはどうすればよいですか? gmock の代替品を検討する必要がありますか?

ありがとう、

バリー

4

1 に答える 1

1

まず、メインがないということはありえません。そうでなければ、単体テストをどのように実行しますか?

次に、次のように、これら 2 つの関数を呼び出すクラスの静的変数を作成できます。

struct GmockInitializer
{
  GmockInitializer()
  {
    ::testing::GTEST_FLAG(throw_on_failure) = true;
    ::testing::InitGoogleMock(0,0);  // << not sure about this. might not work
  }
};
GmockInitializer gmockInitializer;
于 2011-03-18T08:58:20.907 に答える