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
中的消息,但重新执行将始终打印上次重新构建测试项目时的文本。
我自己通过以下步骤解决了这个问题(在进行上述更改之后):
- 关闭 Qt Creator
- 删除项目根目录下的
project.pro.user
文件
- 在 Qt Creator 中重新打开项目
- (可能这不是必需的)在
project.pro
处执行 qmake
现在,一个简单的 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
中的消息,但重新执行将始终打印上次重新构建测试项目时的文本。
我自己通过以下步骤解决了这个问题(在进行上述更改之后):
- 关闭 Qt Creator
- 删除项目根目录下的
project.pro.user
文件 - 在 Qt Creator 中重新打开项目
- (可能这不是必需的)在
project.pro
处执行 qmake
现在,一个简单的 build 会根据我的更改部分更新构建目录中的文件,并且更改会立即生效。