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



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

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

因此,问题在于,由于模拟的方法名称和返回值不同,不同模拟的EXPECT_CALLS是不同的。如何将这两个测试用例合并为一个?

如果你使用 GoogleMock 框架在测试执行期间创建和控制模拟,你可以指定(例如使用EXPECT_CALLS(模拟应该如何表现。

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

最新更新