在项目中使用QT单元测试-主(..)函数冲突

Using QT Unit Tests in a project - conflicting main(...) functions

本文关键字:函数 冲突 单元测试 项目 QT      更新时间:2023-10-16

我在使用单元测试开发应用程序的崇高道路上迈出了第一步,但事实证明这是一条艰难而艰难的道路。我正在Qt中开发一个应用程序,所以考虑使用他们的QTestLib框架。现在,我知道了如何进行单元测试,但我似乎不知道如何将单元测试纳入项目中。假设我有一个控制台应用程序,它只有一个main.cpp和一个cpp和h文件,用于我要开发的类,比如MyClass。我想正确的做法是创建一个相应的测试类MyClassTest及其h和cpp文件。但我应该把它放在同一个项目中吗?或者创建一个单独的项目,只用于单元测试,它可以访问"主"项目中的文件(还不确定我该怎么做)?

如果主应用程序和测试都在同一个项目中,我如何在不运行应用程序或相反的情况下运行测试?我尝试将Qt的单元测试教程1中的文件合并到控制台项目中,但问题是它们使用了一个扩展为main(...)函数的宏QTEST_MAIN(TestQString)。这会导致与main.cpp中的main(...)发生冲突。好吧,我可以重命名其中任何一个,但问题仍然存在——然后我如何运行测试或应用程序本身?如果我覆盖QTEST_MAIN宏(这无论如何都是个坏主意),我将禁用测试。如果我在main.cpp中重命名main(...)函数,那么实际的应用程序永远不会被执行。我想应该有一种方法为项目制作两个单独的可执行文件,一个运行单元测试,另一个启动应用程序,但不知道如何进行

一定要为测试创建一个单独的项目。如果将应用程序项目和测试项目并排排列在目录中,则应该能够使用test.pro文件中的相对路径引用应用程序项目中的代码单元。

我使用这个博客上提供的非常方便的测试运行程序。