考虑这样的代码:
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个值填充向量,我的函数将按正确的顺序和数量调用。 例如,我的测试看起来像这样:
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 :我不仅要检查对象的状态 ,还要检查执行顺序以避免在尽可能早的阶段出现性能问题(通常我想知道我的代码完全按照我的预期执行)。