我看到Qt支持与测试功能关联的数据功能。

http://qt-project.org/doc/qt-4.8/qtestlib-tutorial2.html

是否可以在多个测试中使用某种类似类型的数据功能?

例:

void Test::Test1()
{
  SomeClass::SomeDataType a;
  a.manyValuesComplicatedToSet = 1;
  SomeOtherClass::SomeOtherDataType b;
  b.manyValuesComplicatedToSet = 2;

  QVERIFY(SomeTestClass::someFunction(a,b)== 3);
}

void Test::Test2()
{
  SomeClass::SomeDataType a;
  a.manyValuesComplicatedToSet = 1;
  SomeOtherClass::SomeOtherDataType b;
  b.manyValuesComplicatedToSet = 2;

  QVERIFY(SomeTestClass::someOtherFunction(a,b)== 5);
}

我希望能够在一个通用数据函数中设置上面的数据,这样我就不会每次都键入它。

那可能吗 ?

最佳答案

可以通过将测试数据提取到一个单独的函数中,然后从_data函数中调用该函数来实现:

void Test::Test1()
{
    QFETCH(SomeClass::SomeDataType, a);
    QFETCH(SomeOtherClass::SomeOtherDataType, b);

    QCOMARE(SomeTestClass::someFunction(a,b), 3);
}

void Test::Test1_data()
{
    createTestData();
}

void Test::Test2()
{
    QFETCH(SomeClass::SomeDataType, a);
    QFETCH(SomeOtherClass::SomeOtherDataType, b);

    QCOMPARE(SomeTestClass::someOtherFunction(a,b), 5);
}

void Test::Test2_data()
{
    createTestData();
}

void Test::createTestData()
{
    QTest::addColumn<SomeClass::SomeDataType>("a");
    QTest::addColumn<SomeOtherClass::SomeOtherDataType>("b");

    SomeClass::SomeDataType a;
    a.manyValuesComplicatedToSet = 1;
    SomeOtherClass::SomeOtherDataType b;
    b.manyValuesComplicatedToSet = 2;
    QTest::newRow("test 1") << a << b;
}

请注意,在我上面的示例中,createTestData()而不是定义为广告位。还要注意,要传递SomeClass::SomeDataTypeSomeOtherClass::SomeOtherDataType作为测试数据参数,必须在它们上调用 Q_DECLARE_METATYPE

09-04 03:22
查看更多