0

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());
    }
};
4

1 に答える 1