Учитывая такой код:Как проверить порядок вызова функции
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: Я пытаюсь проверить не только состояния самолета Ан объектов, но и порядок выполнения, чтобы избежать проблем с производительностью на ранних этапах (и вообще я хочу знать, что мой код выполняется точно так, как я ожидал).
благодарит за полезные ответы. теперь я знаю, что мой путь - насмешливые рамки. относительно времени: во-первых, я не знаю целевого времени для сравнения. во-вторых: неожиданный порядок выполнения на ранней стадии, может привести к неправильным результатам позже, с добавлением других классов к модели, так почему я должен ждать? – cos 2008-09-17 02:30:29