我可以让 QTest 多次使用单个数据驱动集吗?
我们在项目中使用 Qt 的 QTest 框架进行低级测试,并在有意义的地方使用数据驱动风格。
我已经到了一个地步,我想对一组测试数据进行几组不同的测试。明显的设计是
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