0

我见过有人将 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());
    }
};
4

1 回答 1

0

这可能是由于 GoogleTest 的 default 中的某些内容TestEventListener。我不记得确切的问题是什么,但它与 MS 测试运行器配合得不好。我认为您也不希望设置 throw_on_failure 标志。

我遇到了同样的问题,并通过TestEventListener在 MS 环境中进行自定义来解决它。我在这里写了一篇。

于 2020-09-20T14:36:50.810 回答