c++ - Qt 自动测试更改仅在“重建”之后才有效,而不是在“构建”之后
问题描述
我在我的 C++ Qt 项目(QT 5.15.1,MSVC 2019,主机和目标:Windows 10)中添加了一个自动测试项目。但是测试源文件中的更改只有在我重建并运行测试项目时才会生效,但如果我只是构建和运行则不会生效,这通常适用于我的主应用程序项目。
我想我错过了测试项目.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 中重新打开项目
- (可能这不是必需的)执行 qmake at
project.pro
现在,一个简单的构建确实更新了构建目录中的文件,部分内容是我的更改,并且更改会立即生效。
推荐阅读
- javascript - 单击时如何更改图像样式
- java - Spring Data @Query - 如何获取当前日期+日期
- c - 如何使二维字符数组完全为空?
- javascript - 在 Angular CLI 中找不到脚本文件
- php - 如何删除 来自没有出现在文本编辑器(Wordpress)中的dom
- javascript - html 中的范围值不适用于 if 语句
- sql - 如何给出与用逗号分隔的括号内给出的任何值匹配的sql的like运算符,并且这些值可以是任何顺序
- javascript - 运行此代码后 chrome 和 firefox 不断崩溃的原因是什么?
- vuejs2 - 无法在我的 vuejs2 项目中设置环境变量
- elixir - 在控制器凤凰框架中重定向时出错