假设我必须用 exclusive 值0和1(两次)测试模拟方法GetSegment。
true
false
false
true
谢谢
答案 0 :(得分:0)
只需几个WillOnce
-一个接一个。
赞:
EXPECT_CALL(*mock.get(), GetSegment(refrenceId, _, _, _))
.WillOnce(DoAll(SetArgReferee<1>(numSegment), SetArgPointee<2>(points), SetArgPointee<3>(0))).
.WillOnce(DoAll(SetArgReferee<1>(numSegment), SetArgPointee<2>(points), SetArgPointee<3>(1)));
您可以在doc中阅读到,WillOnce可以在一个EXPECT_CALL中多次使用:
EXPECT_CALL(mock_object,method(matchers)) .WillOnce(action)*
有效的简化示例:
class MockMM
{
public:
MOCK_METHOD4(GetSegment, void(int refrenceId, int, int, int* a));
};
TEST(A, A)
{
MockMM mock;
EXPECT_CALL(mock, GetSegment(1, _, _, _))
.WillOnce(SetArgPointee<3>(0))
.WillOnce(SetArgPointee<3>(1));
int a;
int b;
mock.GetSegment(1, 1, 0, &a);
mock.GetSegment(1, 0, 1, &b);
ASSERT_EQ(0, a);
ASSERT_EQ(1, b);
}
您也可以使用sequences:
如果您有很长的顺序期望链,则更容易 使用序列指定顺序,不需要您指定 链中的每个期望都有不同的名称。所有预期来电 必须按照指定的顺序执行相同的顺序。
using ::testing::Sequence;
Sequence s1, s2;
...
EXPECT_CALL(foo, Reset())
.InSequence(s1, s2)
.WillOnce(Return(true));
EXPECT_CALL(foo, GetSize())
.InSequence(s1)
.WillOnce(Return(1));
EXPECT_CALL(foo, Describe(A<const char*>()))
.InSequence(s2)
.WillOnce(Return("dummy"));