如何用不同的google mocks运行同一个google测试用例?

问题描述 投票:0回答:1

有几个测试用例是使用一个服务。测试用例是用google test写的。该服务可以是不同的类型,所以我已经模拟每一个与谷歌mock。我如何以这样的方式编写测试,使他们可以用不同的mock运行,而不需要一次又一次地用不同的mock编写相同的测试?

2个不同mock的同一个测试用例是这样写的。

// 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);
}

所以,问题是不同的mock的EXPECT_CALLS是不同的,因为不同的方法名和mock的返回值不同。如何将这2个测试用例合二为一?

c++ googletest googlemock
1个回答
1
投票

如果你使用GoogleMock框架来创建和控制测试执行过程中的mock,你可以指定(使用例如. EXPECT_CALLS)来指定mock的行为方式。

如果你使用SOLID的依赖反转原则,被测试的对象不应该关心在给定的测试中使用了什么类型的mock(即在被测试的类中不应该有依赖于mock类型的代码;被测试的类应该依赖于接口,而不是具体的实现)。

© www.soinside.com 2019 - 2024. All rights reserved.