Microsoft の Cpp ユニット テスト フレームワークで gmock を使用している人を見てきましたが、EXPECT_CALL マクロを使用するテスト (以下の例を参照) を実行しようとすると、CppUnit によるテスト ケースのクリーンアップ中にアクセス違反が発生します。EXPECT_CALL マクロをコメントアウトすると、デフォルトのモック値が false であるため、テストが実行され、アサートが失敗します。
プロジェクトは C++20 を使用しています (std::result_of の代わりに std::invoke_result を使用するように gmock を少し編集する必要がありましたが、これが私の痛みの原因ではないと思います)。
なぜこの問題が発生するのかについて何か考えはありますか?
コード例:
#include "CppUnitTest.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
class MockTest
{
public:
MOCK_METHOD(bool, Foo, (), ());
};
TEST_MODULE_INITIALIZE(ModuleInitialize) {
::testing::GTEST_FLAG(throw_on_failure) = true;
int argc = 0;
wchar_t** argv = nullptr;
::testing::InitGoogleTest(&argc, argv);
::testing::InitGoogleMock(&argc, argv);
}
TEST_CLASS(UnitTestClass)
{
public:
TEST_METHOD(TestMocking) {
MockTest mock;
EXPECT_CALL(mock, Foo)
.Times(1)
.WillOnce(testing::Return(true));
Assert::IsTrue(mock.Foo());
}
};