gpt4 book ai didi

c++ - 如何测试函数调用顺序

转载 作者:太空狗 更新时间:2023-10-29 21:09:32 25 4
gpt4 key购买 nike

考虑这样的代码:

class ToBeTested {
public:
void doForEach() {
for (vector<Contained>::iterator it = m_contained.begin(); it != m_contained.end(); it++) {
doOnce(*it);
doTwice(*it);
doTwice(*it);
}
}
void doOnce(Contained & c) {
// do something
}
void doTwice(Contained & c) {
// do something
}

// other methods
private:
vector<Contained> m_contained;
}

我想测试一下,如果我用 3 个值填充 vector ,我的函数将以正确的顺序和数量被调用。例如,我的测试看起来像这样:

tobeTested.AddContained(one);
tobeTested.AddContained(two);
tobeTested.AddContained(three);

BEGIN_PROC_TEST()
SHOULD_BE_CALLED(doOnce, 1)
SHOULD_BE_CALLED(doTwice, 2)
SHOULD_BE_CALLED(doOnce, 1)
SHOULD_BE_CALLED(doTwice, 2)
SHOULD_BE_CALLED(doOnce, 1)
SHOULD_BE_CALLED(doTwice, 2)

tobeTested.doForEach()
END_PROC_TEST()

您建议如何对此进行测试?有没有办法用 CppUnit 或 GoogleTest 框架来做到这一点?也许其他一些单元测试框架允许执行此类测试?

我知道如果不从这些函数调用任何调试函数,这可能是不可能的,但至少可以在某些测试框架中自动完成。我不喜欢扫描跟踪日志并检查它们的正确性。

UPD:我不仅要检查对象的状态,还要检查执行顺序以避免性能问题尽可能早的阶段(通常我想知道我的代码是否完全按照我的预期执行)。

最佳答案

您应该能够使用任何良好的模拟框架来验证对协作对象的调用是否按特定顺序完成。

但是,您通常不会测试一个方法对同一类上的其他方法进行一些调用...为什么要这样做?

通常,当您测试一个类时,您只关心测试其公开可见的状态。如果你测试否则,您的测试将阻止您以后进行重构。

我可以提供更多帮助,但我认为您的示例不一致(AddContained 方法的实现在哪里?)。

关于c++ - 如何测试函数调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/78723/

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