Qt 自动测试更改仅在 "rebuild" 之后有效,而不是在 "build" 之后有效

Qt auto test changes only effective after "rebuild" not after "build"

我在我的 C++ Qt 项目中添加了一个自动测试项目(QT 5.15.1,MSVC 2019,主机和目标:Windows 10)。但是测试源文件中的更改只有在我 rebuild 和 运行 测试项目时才会生效,但 如果我只是 build 则不会 和 运行,这通常适用于我的主要应用程序项目。

我想我在测试项目的 .pro 文件中遗漏了一个重要设置。

有人可以告诉我我缺少什么吗?

详情

我有以下项目结构

/project
 |- project.pro                 -- template = subdirs
 |- /app
 |   |- app.pro                 -- template = app
 |   |- main.cpp
 |   \- mainwindow and source files
 \- /tests
     |- tests.pro               -- template = subdirs
     \- /unittests
         |- unittests.pro       -- template = subdirs
         \- /objectXTest
             |- objectXTest.pro -- template = app
             |- tst_objectXTest.cpp
             \- tst_objectXTest.h

我的 objectXTest.pro 文件在哪里

QT += testlib
QT -= gui

SRC_DIR = ../../../app
INCLUDEPATH += \
    $${SRC_DIR} \                    # common/global project root headers
    $${SRC_DIR}/path/to/objectX      # headers relative to unit's source directory

CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += \
    tst_objectXTest.cpp \
    $${SRC_DIR}/path/to/objectX/objectX.cpp

HEADERS += \
    tst_objectXTest.h

我的测试源是

// tst_objectXTest.h
#ifndef TST_OBJECTXTEST_H
#define TST_OBJECTXTEST_H

#include <QtTest>

// add necessary includes here
#include "objectX.h"

class ObjectXTest : public QObject {
    Q_OBJECT

public:
    ObjectXTest () {}
    ~ObjectXTest () {}

private slots:
    void initTestCase();
    void cleanupTestCase();

    void test_construction();
};

#endif // TST_OBJECTXTEST_H

// tst_objectXTest.cpp
#include "tst_objectXTest.h"

void ObjectXTest::initTestCase() { }
void ObjectXTest::cleanupTestCase() { }

void ObjectXTest::test_construction() {
    auto p_ox = new ObjectX();
    QWARN("some message");
    delete p_ox;
}

QTEST_APPLESS_MAIN(ObjectXTest)

我尝试更改上面 QWARN 中的消息,但重新执行将始终打印上次重新构建测试项目时的文本。

我自己通过以下步骤解决了这个问题(在进行上述更改之后):

  1. 关闭 Qt Creator
  2. 删除项目根目录下的project.pro.user文件
  3. 在 Qt Creator 中重新打开项目
  4. (可能这不是必需的)project.pro
  5. 处执行 qmake

现在,一个简单的 build 会根据我的更改部分更新构建目录中的文件,并且更改会立即生效。