Qt 单元测试 #
Qt Test 框架 #
基本测试类 #
cpp
#include <QtTest>
class TestMyClass : public QObject
{
Q_OBJECT
private slots:
void initTestCase(); // 测试开始前执行一次
void cleanupTestCase(); // 测试结束后执行一次
void init(); // 每个测试用例前执行
void cleanup(); // 每个测试用例后执行
void testFunction1(); // 测试用例
void testFunction2();
};
void TestMyClass::initTestCase()
{
// 初始化测试环境
}
void TestMyClass::testFunction1()
{
QCOMPARE(1 + 1, 2);
QVERIFY(true);
}
QTEST_MAIN(TestMyClass)
#include "test_myclass.moc"
测试宏 #
cpp
// 比较相等
QCOMPARE(actual, expected);
// 验证条件
QVERIFY(condition);
// 验证条件为真
QVERIFY2(condition, "message on failure");
// 验证抛出异常
QVERIFY_EXCEPTION_THROWN(function(), ExceptionType);
数据驱动测试 #
cpp
void TestMyClass::testAdd_data()
{
QTest::addColumn<int>("a");
QTest::addColumn<int>("b");
QTest::addColumn<int>("result");
QTest::newRow("positive") << 1 << 2 << 3;
QTest::newRow("negative") << -1 << -2 << -3;
QTest::newRow("zero") << 0 << 0 << 0;
}
void TestMyClass::testAdd()
{
QFETCH(int, a);
QFETCH(int, b);
QFETCH(int, result);
QCOMPARE(a + b, result);
}
GUI 测试 #
cpp
#include <QTest>
void TestMyWidget::testButtonClick()
{
MyWidget widget;
widget.show();
QTest::qWaitForWindowExposed(&widget);
QPushButton *button = widget.findChild<QPushButton*>("myButton");
QTest::mouseClick(button, Qt::LeftButton);
QCOMPARE(widget.clickCount(), 1);
}
void TestMyWidget::testKeyboardInput()
{
QLineEdit *lineEdit = new QLineEdit;
QTest::keyClicks(lineEdit, "Hello");
QCOMPARE(lineEdit->text(), QString("Hello"));
QTest::keyClick(lineEdit, Qt::Key_Enter);
}
运行测试 #
bash
# 运行所有测试
./test_myclass
# 运行指定测试用例
./test_myclass testFunction1
# 输出详细信息
./test_myclass -v1
# 输出到文件
./test_myclass -o result.txt
项目配置 #
qmake
# .pro 文件
QT += testlib
SOURCES += test_myclass.cpp
下一步 #
现在你已经掌握了单元测试,接下来学习 调试技巧,了解 Qt 应用的调试方法!
最后更新:2026-03-29