Chapter 1: 编写一个单元测试

在第一章, 我们演示如何为类编写一个简单的单元测试, 以及如何运行它.

编写一个测试

假设你想测试QString的行为. 首先, 你需要编写一个类, 包含你的测试函数. 这个类继承自QObject:


  #include <QtTest/QtTest>

  class TestQString: public QObject
  {
      Q_OBJECT
  private slots:
      void toUpper();
  };

注意: 你需要包含QTest头文件, 并将测试函数声明为私有槽函数, 这样, Qt测试框架会查找并运行它.

然后, 你需要实现测试函数. 实现代码如下所示:


  void TestQString::toUpper()
  {
      QString str = "Hello";
      QVERIFY(str.toUpper() == "HELLO");
  }

QVERIFY()宏计算作为参数传入的表达式. 如果表达式的计算结果等于true, 测试函数继续运行. 否则, 错误的描述信息写入测试日志, 测试函数停止运行.

如果你需要更多的输出信息, 你应该使用QCOMPARE()宏:


  void TestQString::toUpper()
  {
      QString str = "Hello";
      QCOMPARE(str.toUpper(), QString("HELLO"));
  }

若两个字符串不相等, 则它们都会出现在测试日志中, 你可以立即看出这个比较为什么失败.

最后, 如果你想让我们的测试用例独立运行, 你需要在后面加入两行:


  QTEST_MAIN(TestQString)
  #include "testqstring.moc"

QTEST_MAIN()宏会扩展成一个简单的main()函数, 可以运行所有的测试函数.

注意: 如果声明和实现在一个.cpp文件, 那么, 我们也需要包含moc文件, 让Qt做额外的工作.

运行Test

现在, 我们编写完我的测试程序, 想运行它. 假设我们的测试文件在一个空目录, 并保存为testqstring.cpp, 我们可以使用qmake创建一个工程, 生成makefile文件.


  /myTestDirectory$ qmake -project "QT += testlib"
  /myTestDirectory$ qmake
  /myTestDirectory$ make

注意: 如果你使用Windows系统, 你应该将make替换成nmake, 或者其他构建工具.

运行测试程序的输出结果如下所示:


  ********* Start testing of TestQString *********
  Config: Using QtTest library %VERSION%, Qt %VERSION%
  PASS   : TestQString::initTestCase()
  PASS   : TestQString::toUpper()
  PASS   : TestQString::cleanupTestCase()
  Totals: 3 passed, 0 failed, 0 skipped
  ********* Finished testing of TestQString *********

恭喜, 你成功的使用Qt Test框架, 编写并运行你第一个单元测试程序.

文件: