我有一个相当大的Qt GUI项目,遗憾的是缺乏正确的单元测试。
我计划为每个班级准备一个包含测试源文件的测试项目。
我深入研究了很多Qt的官方文档,不过还有一些问题:
非常感谢任何指向大型Qt项目提示测试的教程的指南。
答案 0 :(得分:3)
我没有太多时间在Qt进行完美的单元测试。但是,我确实弄明白了如何让主管道工作。我希望这可以帮到你,虽然你可能比我研究Writing Unit Tests guide做得更好。
如何创建测试套件?似乎所有文档和教程仅涵盖编写一个测试,但如何有效地捆绑我的单元测试?
您可以通过将单元测试(对象上的插槽)收集到对象中并组合这些对象来组织“套件”。
<强> test_example.pro 强>
TARGET = test_example
TEMPLATE = app
CONFIG += testcase
QT += testlib core
... INCLUDEPATH, SOURCES, HEADERS, etc...
<强>的main.cpp 强>
#include <QtTest/QtTest>
#include "MainTest.h"
// This macro introduces an event loop
QTEST_MAIN(MainTest)
<强> MainTest.h 强>
class MainTest : public QObject
{
Q_OBJECT
private slots:
// Each slot is a unit test
void init()
{
}
// Create a "test suite" by bundling tests into objects
void runFirstSuite()
{
FirstSuiteUiTest first;
first.test(); // runs 10 tests
FirstSuiteIoTest second;
second.test(); // runs 999 tests
...
}
void SecondSuite()
{
QFAIL("This suite is not really a suite, and it always fails");
}
};
您还可以将测试组织到物理文件结构中。我使用了一个子项目作为我的根.pro文件,所以我可以构建工件(动态和静态存档,二进制文件)并运行许多单元测试集合。
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += src/core
SUBDIRS += src/some_dll
SUBDIRS += src/test/awesome_core_test_1 #Holds many suites
SUBDIRS += src/test/awesome_core_test_2 #Holds many other suites!
core.depends = core
awesome_core_test_1.depends = core
awesome_core_test_2.depends = core
因此,通过将单元测试组织到对象组合和物理文件中,您可以进行一些组织细化。可能有更好或不同的方式,但我不确定。
如何将测试执行集成到Qt Creator中?也许在构建后步骤中运行测试会很有趣吗?
将CONFIG += testcase
添加到.pro文件中。这会创建一个构建目标。通过运行make check
我应该将所有普通源文件添加到测试项目中,还是有办法创建静态库?
你可以这样做,就像在任何其他项目中一样。
答案 1 :(得分:1)
如何创建测试套件?似乎所有文档和教程仅涵盖编写一个测试,但如何有效地捆绑我的单元测试?
在&#34; Qt单元测试班&#34;每个私人插槽都是一个单元测试。不存在添加新测试的其他标准方法,但存在非文档qmake功能。您可以阅读in this forum thread
如何将测试执行集成到Qt Creator中?也许在构建后步骤中运行测试会很有趣吗?
您可以添加CONFIG + = testcase测试项目,这将生成额外的make target - check。当然,您可以在任何地方添加此构建步骤。另外,您可以在这里阅读 - Writing_Unit_Tests
我应该将所有普通源文件添加到测试项目中,还是有办法创建静态库?
您可以使用源创建静态或动态库并将它们链接到测试项目,或者您可以添加源代码来测试项目,如here
顺便说一句,您可以使用Qt here
观看单元测试的示例