gpt4 book ai didi

c++ - Qt - 引用项目的 main() 函数覆盖了实际项目的 main()

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:53 25 4
gpt4 key购买 nike

我正在 Qt Creator 中制作一个单元测试 Qt 项目,该项目引用了我要测试的项目中的文件。现在,无论我是通过 .pri 文件引用我想测试的类,还是通过将相关文件直接添加到单元测试项目的 SOURCES 和 HEADERS 变量中(并且 .pri 文件似乎确实做同样的事情,它只包含 SOURCES 和HEADERS 条目),从主项目添加文件似乎覆盖了单元测试项目中的 main.cpp。

我的意思是,当我构建并运行 uni 测试可执行文件时,原始项目的 main() 函数运行!如果我重命名原始项目中的 main.cpp 或单元测试项目中的 main.cpp(更改其 .pro 文件),那么事情就会顺利进行。好吧,我可以接受这样的解决方案,但它有点不舒服,因为将来有一天我可能会不小心为这两个项目中的某些文件使用相同的名称,谁知道呢,也许会出现错误,这将是一场追查的噩梦.此外,我只是好奇这种行为的原因是什么。

当然.pri文件只包括类头文件和cpp文件,而不是原始应用程序的main.cpp,例如就我而言:

HEADERS += \
../Project/fooclass.h

SOURCES += \
../Project/fooclass.cpp

而且两个项目都在彼此相邻的目录中,而不是嵌套。

编辑:Frank Osterfeld要求查看我的测试的 pro 文件,所以这里是:

测试的pro文件:

QT       += core
QT -= gui
QT += testlib

TARGET = Tests
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += \
test_class.cpp \
main_unit_tests.cpp

HEADERS += \
AutoTest.h \
test_class.h \

include(trial.pri)

Trial.pri 包含我要测试的主项目的文件。 main_unit_tests.cpp(从原来的 main.cpp 重命名为临时解决方案)包含:

#include <QtCore/QCoreApplication>
#include "AutoTest.h"

TEST_MAIN

TEST_MAIN 在 AutoTest.h 中定义为

#define TEST_MAIN \
int main(int argc, char *argv[]) \
{ \
return AutoTest::run(argc, argv); \
}

访问此 page有关 AutoTest.h 做什么的描述。简而言之,它使使用 Qt 框架运行多个单元测试变得不那么麻烦。


编辑:临。主项目的文件(即包含我要测试的类的文件)是:

QT       += core
QT -= gui

TARGET = Project
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
fooclass.cpp

HEADERS += \
fooclass.h

它位于路径上:...\Unit_Test\Project而单元测试项目位于路径上: ...\Unit_Test\Tests现在一切正常,因为定义 main() 的文件在两个项目中都不同。只要我重命名它们使它们相同,单元测试项目就会执行原始项目的主要功能。

最佳答案

文件名并不重要,重要的是单元测试的构建中包含了多少个 main() 函数。不要在单元测试项目的 SOURCES 中包含实际应用程序的 main.cpp,这样应该没问题。

关于c++ - Qt - 引用项目的 main() 函数覆盖了实际项目的 main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com