Могу ли я заставить QTest использовать один набор данных более одного раза?
Мы используем инфраструктуру Qtest Qt для низкоуровневых тестов в проекте и используем стиль, управляемый данными, где это имеет смысл.
Я пришел к тому, что хочу провести несколько отдельных наборов тестов для одного набора тестовых данных. Очевидный дизайн
void testcalss::teststuff_data()
{
QTest::addColumn<int>("number");
QTest::addColumn<double>("size");
QTest::newRow("first") << 1 << 3.14;
QTest::newRow("second") << 42 << 2.718;
}
void testclass::teststuff()
{
QFETCH(int, number);
QFETCH(double, value);
// Test one thing about this stuff
QCOMPARE( f(number), value ); // <=== If it fails here ...
// test some other thing
QCOMPARE( g(number), h(value)); // <=== ... it doesn't even try this
}
Более или менее прямо из документации, верно?
Но небольшое раздражение - это то, как оно сокращает последующие тесты, если ранний провал (примечания в комментариях). Иногда это желаемое поведение, а иногда нет, но сейчас я хочу попробовать второй тест, даже если первый не пройден.
Возможная альтернативная схема реализации:
void testcalss::teststuff_data()
{
QTest::addColumn<int>("number");
QTest::addColumn<double>("size");
QTest::newRow("first") << 1 << 3.14;
QTest::newRow("second") << 42 << 2.718;
}
void testclass::teststuff()
{
QFETCH(int, number);
QFETCH(double, value);
QCOMPARE( f(number), value );
}
void testclass::teststuff2()
{
QFETCH(int, number); // <=== No data!
QFETCH(double, value);
QCOMPARE( g(number), h(value));
}
но, разумеется, входные данные teststuff_data()
уже были использованы к моменту запуска teststuff2
.