【发布时间】:2013-08-20 22:57:06
【问题描述】:
我使用 Given/When/Then 模式使测试代码更清晰。由于我使用 C++ 编写这些测试,因此我选择使用 Google Test。通过测试,模式很清楚,因为我这样做:
TEST(TestFixture, TestName)
{
// Given
int a = 5;
int b = 6;
int expectedResult = 30;
// When
int result = Multiply(a, b);
// Then
EXPECT_EQ(expectedResult, result);
}
但是对于模拟,它不再是清晰的,因为在 Given 部分中出现了一些 EXPECT。 Given 部分假设是一个设置步骤。请看一个例子:
TEST(TestFixture, TestName)
{
// Given
int a = 5;
int b = 6;
int expectedResult = 30;
MightCalculatorMock mock;
EXPECT_CALL(mock, multiply(a,b))
.WillOnce(Return(expectedResult));
// When
int result = Multiply(mock, a, b);
// Then
EXPECT_EQ(expectedResult, result);
}
这种方法正确吗? Given/When/Then cmets 应该如何放在测试代码中,放在哪里?
【问题讨论】:
标签: c++ unit-testing googletest googlemock