QtTest:防止可执行文件被复制到系统
QtTest: prevent executable from being copied to system
因此,我正在编写一些库并希望对其进行适当的单元测试(如 TDD 等)。 QtTest 框架看起来很适合入手。库本身没问题,测试也是。
但是当我将库和测试项目都添加到我的工作项目时,CI 构建出人意料地失败了。正在复制测试可执行文件(LibraryTest.exe 或 Linux 上的类似文件):
- 到 Windows
上的单独文件夹中的 %QTDIR%/tests
- 到 /usr/tests 在 Linux
我的测试项目设置将此行为添加到 "install" 构建阶段,它们是(重要的):
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 与常规的不同,但是 official documentation 只是说明了以下内容:
For testcase projects, qmake will insert a check target into the generated Makefile. This target will run the application. The test is considered to pass if it terminates with an exit code equal to zero.
这给出了一个提示,究竟是什么导致 makefile 具有额外的 install_target: first FORCE
以及奇怪和错误的文件复制,但没有更深入地解释该行为。
经过更多搜索后,我发现了以下 here:
Note also that Qt tests have only been tested with a non-installing Qt (the -prefix $PWD option above). The test project files override the make install target, so they are not installable. And Qt doesn't work at all if it's not at its installation path.
就我的项目大量使用 install
构建步骤和测试是项目树的一部分而言,它解释了问题。
因此,我正在编写一些库并希望对其进行适当的单元测试(如 TDD 等)。 QtTest 框架看起来很适合入手。库本身没问题,测试也是。
但是当我将库和测试项目都添加到我的工作项目时,CI 构建出人意料地失败了。正在复制测试可执行文件(LibraryTest.exe 或 Linux 上的类似文件):
- 到 Windows 上的单独文件夹中的 %QTDIR%/tests
- 到 /usr/tests 在 Linux
我的测试项目设置将此行为添加到 "install" 构建阶段,它们是(重要的):
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 与常规的不同,但是 official documentation 只是说明了以下内容:
For testcase projects, qmake will insert a check target into the generated Makefile. This target will run the application. The test is considered to pass if it terminates with an exit code equal to zero.
这给出了一个提示,究竟是什么导致 makefile 具有额外的 install_target: first FORCE
以及奇怪和错误的文件复制,但没有更深入地解释该行为。
经过更多搜索后,我发现了以下 here:
Note also that Qt tests have only been tested with a non-installing Qt (the -prefix $PWD option above). The test project files override the make install target, so they are not installable. And Qt doesn't work at all if it's not at its installation path.
就我的项目大量使用 install
构建步骤和测试是项目树的一部分而言,它解释了问题。