如何使用不同的 google 模拟 运行 相同的 google 测试用例?

How to run the same google test case with different google mocks?

有几个正在使用服务的测试用例。测试用例是用 google 测试编写的。该服务可以有不同的类型,所以我用 google mock 模拟了每一种服务。我如何以这种方式编写测试,以便它们可以 运行 使用不同的模拟,而不用一次又一次地使用不同的模拟编写相同的测试?

2个不同模拟的相同测试用例是这样写的:

// For mock A
TEST_F(MockASampleTest, sample_test_case)
{
    EXPECT_CALL(mockA, mockAFunc(_))
        .Times(1)
        .WillOnce(Return(mockARetVal));
    EXPECT_EQ(testObj.testFunc(), 32);
}

// For mock B
TEST_F(MockBSampleTest, sample_test_case)
{
    EXPECT_CALL(mockB, mockBFunc(_))
        .Times(1)
        .WillOnce(Return(mockBRetVal));
    EXPECT_EQ(testObj.testFunc(), 32);
}

所以,问题是由于不同的方法名称和模拟的 return 值,不同模拟的 EXPECT_CALLS 是不同的。如何将这 2 个测试用例合并为一个?

如果您使用 GoogleMock 框架在测试执行期间创建和控制模拟,您可以指定(例如使用 EXPECT_CALLS)模拟的行为方式。

如果您使用 SOLID 中的依赖倒置原则(即 class 中不应有依赖于模拟类型的代码,则被测对象不应该关心给定测试中使用的模拟类型测试中;测试的 class 应该依赖于接口,而不是具体的实现)