我见过有人将 gmock 与 Microsoft 的 Cpp 单元测试框架一起使用,但是每当我尝试运行使用 EXPECT_CALL 宏的测试(参见下面的示例)时,我都会在 CppUnit 清理测试用例期间遇到访问冲突。如果我注释掉 EXPECT_CALL 宏,那么测试执行并且断言失败,因为默认的模拟值为 false。
该项目正在使用 C++20(必须对 gmock 进行一个小编辑以使用 std::invoke_result 而不是 std::result_of,但我不认为这是我痛苦的根源)。
关于我为什么会遇到这个问题的任何想法?
示例代码:
#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());
}
};