有几个测试用例是使用一个服务。测试用例是用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个测试用例合二为一?
如果你使用GoogleMock框架来创建和控制测试执行过程中的mock,你可以指定(使用例如. EXPECT_CALLS
)来指定mock的行为方式。
如果你使用SOLID的依赖反转原则,被测试的对象不应该关心在给定的测试中使用了什么类型的mock(即在被测试的类中不应该有依赖于mock类型的代码;被测试的类应该依赖于接口,而不是具体的实现)。