因此,我在这里编写一些库,并希望对其进行适当的单元测试(例如TDD等)。 QtTest框架看起来很适合入手。库本身很好,测试也可以。
但是,当我将库和测试项目都添加到我的工作项目中时,CI构建令人惊讶地失败了。发生了测试可执行文件(LibraryTest.exe或Linux上的类似文件)正在被复制:
我的测试项目设置将此行为添加到“安装”构建阶段,在那里(重要的):
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错了吗?预先感谢您的关注。
答案 0 :(得分:0)
好吧,在以我自己的方式破解测试并获得足够的时间来彻底研究问题之后,发现Qt的测试被设计为以我想不到的另一种方式使用。
很明显,测试用例的makefile与常规用例不同,但是official documentation只是声明了以下内容:
对于测试用例项目,qmake将检查目标插入到生成的Makefile中。该目标将运行该应用程序。如果测试以退出代码等于0终止,则认为该测试通过。
这给出了一个提示,究竟是什么导致makefile带有多余的install_target: first FORCE
且文件复制异常而又错误,但是并没有更深入地解释这种行为。
经过更多的搜索之后,我发现了以下here:
还要注意,Qt测试仅在未安装Qt的情况下进行了测试(上面的-prefix $ PWD选项)。测试项目文件将覆盖make安装目标,因此它们不可安装。如果Qt不在其安装路径上,则根本无法使用。
只要我的项目大量使用install
构建步骤并且测试是项目树的一部分,它就可以解释问题。