所以,我正在编写一些库,并打算对其进行适当的单元测试(如TDD等)。QtTest框架看起来很适合开始。库本身很好,测试也很好。
但是,当我将库和测试项目都添加到我的作业项目中时,CI 构建出人意料地失败了。正在复制测试可执行文件(LibraryTest.exe或Linux上的类似可执行文件):
- 到 %QTDIR%/tests 在 Windows 上的单独文件夹中
- 在 Linux 上到/usr/tests
我的测试项目设置将此行为添加到"安装"构建阶段,它们是(重要的):
QT += core testlib
# The problem is below
CONFIG += c++11 qt warn_on depend_includepath #testcase
CONFIG -= app_bundle
LIBS *= -L$$PWD -lmylibrary # not exact, does not matter
TARGET = LibraryTest
SOURCES +=
tst_my_library_test.cpp
DEFINES *= QT_FORCE_ASSERTS
DESTDIR = $$PWD/bin
如您所见,注释掉CONFIG += testcase
后,可执行文件不再复制到某个地方。我读到这个配置选项用于自动测试,看起来很有用,但没有写任何关于任何特殊安装阶段的文章。测试可执行文件存在于DESTDIR
中很好,所以它不是什么意外错误。
我的问题是:为什么会这样?我可以指定其他文件夹吗? 自动化是有用的,但即使实现它也可能绑定到一些更方便的目录。
我煮QtTest是不是做错了?提前感谢您的关注。
好吧,在以我自己的方式破解测试并有足够的时间彻底研究问题之后,Qt的测试被设计成以与我想象的完全不同的方式使用。
很明显,测试用例的 makefile 与常规文件不同,但官方文档只是陈述了以下内容:
对于测试用例项目,qmake 会在生成的 Makefile 中插入一个检查目标。此目标将运行应用程序。如果测试以等于零的退出代码终止,则认为测试通过。
这给出了一个提示,究竟是什么导致makefile具有奇怪和错误的文件复制的额外install_target: first FORCE
,但没有更深入地解释这种行为。
经过一番修改后,我在这里找到了以下内容:
另请注意,Qt测试仅使用非安装Qt(上面的前缀$PWD选项)进行了测试。测试项目文件将覆盖 make 安装目标,因此它们不可安装。如果Qt不在安装路径上,它根本不起作用。
就我的项目大量使用install
构建步骤而言,测试是项目树的一部分,它解释了这个问题。