在上面我们完成了第一个单元测试,并测试了一项数据。但是在实际测试中,要对多种边界数据进行测试,需要逐项初始化,完成测试,但这样非常的麻烦。而Qtestlib给我们提供了QTest::addColumn()函数建立需要的测试的数据列,QTest::newRow()函数添加数据列。初始化数据的函数名和测试函数名一样,但添加了后缀_data(),这里通过一个例子说明如何进行批处理数据测试,被测试类还是使用上面的Mainwindow类。
示例四:
#include <QtCore/QString>
#include <QtTest/QtTest>
#include "mainwindow.h"
using namespace QTest;
class TestProjetcATest : public QObject
{
Q_OBJECT
public:
TestProjetcATest();
private Q_SLOTS:
//每个私有的private slot函数都是会自动调用的测试函数
void testCase1();
//以"_data"结尾的函数行对应的测试函数提供测试数据
void testCase1_data();
void testCase2();
void testCase2_data();
};
TestProjetcATest::TestProjetcATest()
{
}
void TestProjetcATest::testCase1()
{
QFETCH(qint32,int1);
QFETCH(qint32,int2);
QFETCH(qint32,reint);
QCOMPARE(MainWindow::sumab(int1,int2),reint);
}
void TestProjetcATest::testCase1_data(){
//添加数据列
QTest::addColumn<qint32>("int1");
QTest::addColumn<qint32>("int2");
QTest::addColumn<qint32>("reint");
//添加数据
QTest::newRow("i1") << 2 << 3 << 5;
QTest::newRow("i2") << 56 <<40 << 96;
}
void TestProjetcATest::testCase2(){
QFETCH(QString,string1);
QFETCH(QString,string2);
QFETCH(QString,result);
QCOMPARE(MainWindow::sumab(string1,string2),result);
}
void TestProjetcATest::testCase2_data()
{
//添加数据列
QTest::addColumn<QString>("string1");
QTest::addColumn<QString>("string2");
QTest::addColumn<QString>("result");
//添加测试数据
QTest::newRow("first") << "he" << "llo" << "hello";
QTest::newRow("two") << "He" << "llo" << "Hello";
}
//用于构建可执行的测试程序
QTEST_APPLESS_MAIN(TestProjetcATest)
#include "tst_testprojetcatest.moc"
示例四的运行结果: