QTestLib 框架提供了一个简单易用的单元测试框架,需要在工程文件中添加Qt+=testlib。先看一个简单的例子:

#include <QtTest/QtTest>
class TestQString: public QObject
{
  Q_OBJECT
private slots:
  // 每个private slot函数都是会被自动调用的测试函数
  void testToLower();
  // 以“_data”结尾的函数向对应的测试函数提供测试数据
  void testToLower_data();
};
void TestQString::testToLower()
{
  // 获取测试数据
  QFETCH(QString, string);
  QFETCH(QString, result);
  // 如果输入的两个参数不同,则会被认为测试失败
  QCOMPARE(string.toLower(), result);
}
void TestQString::testToLower_data()
{
  // 添加数据列
  QTest::addColumn<QString>("string");
  QTest::addColumn<QString>("result");
  // 添加测试数据
  QTest::newRow("lower") << "hello" << "hello";
  QTest::newRow("mixed") << "HeLlO" << "hello";
  QTest::newRow("upper") << "HELLO" << "hello";
}
// 用于构建可执行的测试程序
QTEST_MAIN(TestQString)
#include "testqstring.moc"

  此外,Qt还提供了以下四个会被自动调用的private slot:

  initTestCase():在测试开始前被调用

  cleanupTestCase():在测试结束后被调用

  init():每个测试函数执行前被调用

  cleanup():每个测试函数执行后被调用

  测试完成后输出的结果如下所示:

********* Start testing of TestQString *********
Config: Using QTest library 4.5.3, Qt 4.5.3
PASS   : TestQString::initTestCase()
PASS   : TestQString::testToLower()
PASS   : TestQString::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TestQString *********