1

因此,我正在编写一些库并决定对其进行适当的单元测试(如 TDD 等)。QtTest 框架看起来很适合入手。图书馆本身很好,测试也很好。

但是当我将库和测试项目都添加到我的工作项目中时,CI 构建出人意料地失败了。发生测试可执行文件(Linux 上的 LibraryTest.exe 或类似文件)被复制:

  • 到 Windows 上单独文件夹中的 %QTDIR%/tests
  • 到 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 了吗?提前感谢您的关注。

4

1 回答 1

0

好的,在以我自己的方式破解测试并获得足够的时间来彻底研究问题之后,Qt 的测试被设计为以与我想象的完全不同的方式使用。

很明显,测试用例的 makefile 与常规的不同,但官方文档只是说明了以下内容:

对于测试用例项目,qmake 会在生成的 Makefile 中插入一个检查目标。该目标将运行应用程序。如果测试以等于零的退出代码终止,则认为测试通过。

这给出了一个提示,究竟是什么导致 makefile 有额外install_target: first FORCE的奇怪和错误的文件复制,但没有更深入地解释这种行为。

经过一番搜索后,我在这里发现了以下内容:

另请注意,Qt 测试仅在未安装 Qt 的情况下进行了测试(上面的 -prefix $PWD 选项)。测试项目文件会覆盖 make install 目标,因此它们是不可安装的。如果 Qt 不在其安装路径中,则它根本不起作用。

至于我的项目大量使用install构建步骤并且测试是项目树的一部分,它解释了问题。

于 2019-09-16T13:47:43.417 回答