如何在 EXPECT_CALL 中使用 testing::_,排除 2 个值?
How to use testing::_ in an EXPECT_CALL, excluding 2 values?
我有一个方法,它在内部调用一个 returns 布尔值的方法 - 在这个问题中,让我们命名该方法:
bool IsFilled(int value)
现在我正在测试的另一种方法被多次调用:
if (IsFilled(0))
{
if (IsFilled(1)){
...
} else {
...
}
}
for (int i = 1; i < range; i++)
{
if (IsFilled(i)) {
...
if (IsFilled(0)) {
}
}
}
现在如何使用 gtest 正确测试它?我主要是为了覆盖和测试分支而不是价值。因此,我期待做这样的事情:
EXPECT_CALL(adapter, IsFilled(0)).Times(zeroCalls).WillOnce(IndexZeroResults);
EXPECT_CALL(adapter, IsFilled(1)).Times(oneCalls).WillOnce(IndexOneResults);
EXPECT_CALL(adapter, IsFilled(_)).Times(otherCalls).WillOnce(IndexOtherResults);
我需要将 0/1 调用分开,这样我才能测试所有分支,但是,“_”会复制 0/1 调用,因为它使用随机值进行测试。是否可以排除?
TL;DR - 交换 EXPECT_CALL
s:
的顺序
EXPECT_CALL(adapter, IsFilled(_)).Times(otherCalls).WillOnce(IndexOtherResults);
EXPECT_CALL(adapter, IsFilled(1)).Times(oneCalls).WillOnce(IndexOneResults);
EXPECT_CALL(adapter, IsFilled(0)).Times(zeroCalls).WillOnce(IndexZeroResults);
这是因为 GoogleMock rules for ordering EXCEPT_CALLs。期望总是以与声明相反的顺序被考虑(所以最后声明的期望首先被验证)。就像这样,您可以在测试夹具中创建一般期望,在测试主体中创建特定期望。
我有一个方法,它在内部调用一个 returns 布尔值的方法 - 在这个问题中,让我们命名该方法:
bool IsFilled(int value)
现在我正在测试的另一种方法被多次调用:
if (IsFilled(0))
{
if (IsFilled(1)){
...
} else {
...
}
}
for (int i = 1; i < range; i++)
{
if (IsFilled(i)) {
...
if (IsFilled(0)) {
}
}
}
现在如何使用 gtest 正确测试它?我主要是为了覆盖和测试分支而不是价值。因此,我期待做这样的事情:
EXPECT_CALL(adapter, IsFilled(0)).Times(zeroCalls).WillOnce(IndexZeroResults);
EXPECT_CALL(adapter, IsFilled(1)).Times(oneCalls).WillOnce(IndexOneResults);
EXPECT_CALL(adapter, IsFilled(_)).Times(otherCalls).WillOnce(IndexOtherResults);
我需要将 0/1 调用分开,这样我才能测试所有分支,但是,“_”会复制 0/1 调用,因为它使用随机值进行测试。是否可以排除?
TL;DR - 交换 EXPECT_CALL
s:
EXPECT_CALL(adapter, IsFilled(_)).Times(otherCalls).WillOnce(IndexOtherResults);
EXPECT_CALL(adapter, IsFilled(1)).Times(oneCalls).WillOnce(IndexOneResults);
EXPECT_CALL(adapter, IsFilled(0)).Times(zeroCalls).WillOnce(IndexZeroResults);
这是因为 GoogleMock rules for ordering EXCEPT_CALLs。期望总是以与声明相反的顺序被考虑(所以最后声明的期望首先被验证)。就像这样,您可以在测试夹具中创建一般期望,在测试主体中创建特定期望。