gpt4 book ai didi

c++ - GoogleMock:期待两个方法调用中的任何一个

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:54 26 4
gpt4 key购买 nike

我有一个 Foo 类,它引用多个其他 IBar 类型的对象。该类有一个方法 fun,它需要至少在其中一个 IBar 上调用方法 frob。我想用模拟的 IBar 编写一个测试来验证这个要求。我正在使用 GoogleMock。我目前有这个:

class IBar { public: virtual void frob() = 0; };
class MockBar : public IBar { public: MOCK_METHOD0(frob, void ()); };

class Foo {
std::shared_ptr<IBar> bar1, bar2;
public:
Foo(std::shared_ptr<IBar> bar1, std::shared_ptr<IBar> bar2)
: bar1(std::move(bar1)), bar2(std::move(bar2))
{}
void fun() {
assert(condition1 || condition2);
if (condition1) bar1->frob();
if (condition2) bar2->frob();
}
}

TEST(FooTest, callsAtLeastOneFrob) {
auto bar1 = std::make_shared<MockBar>();
auto bar2 = std::make_shared<MockBar>();
Foo foo(bar1, bar2);

EXPECT_CALL(*bar1, frob()).Times(AtMost(1));
EXPECT_CALL(*bar2, frob()).Times(AtMost(1));

foo.fun();
}

但是,这不会验证是否调用了 bar1->frob()bar2->frob(),只是两者都没有被调用超过一次.

GoogleMock 中有没有一种方法可以测试对一组期望的最小调用次数,例如我可以调用 ExpectationSetTimes() 函数?

最佳答案

这可以通过使用 check points 来实现:

using ::testing::MockFunction;

MockFunction<void()> check_point;
EXPECT_CALL(*bar1, frob())
.Times(AtMost(1))
.WillRepeatedly(
InvokeWithoutArgs(&check_point, &MockFunction<void()>::Call);
EXPECT_CALL(*bar2, frob())
.Times(AtMost(1))
.WillRepeatedly(
InvokeWithoutArgs(&check_point, &MockFunction<void()>::Call);
EXPECT_CALL(check_point, Call())
.Times(Exactly(1));

关于c++ - GoogleMock:期待两个方法调用中的任何一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com