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

10

我开始走上使用单元测试来开发应用程序的崇高之路,但这证明是一条陡峭而艰难的道路。我正在使用Qt开发一个应用程序,所以想要使用他们的QTestLib框架。现在,我知道如何编写单元测试,但我似乎无法弄清楚如何将单元测试整合到项目中。

假设我有一个控制台应用程序,它只有一个main.cpp文件和一个cpp和h文件,用于开发一个类,比如MyClass。我想,正确的做法应该是创建一个相应的测试类MyClassTest,其中包含它的h和cpp文件。但是我应该将它放入同一个项目中吗?还是创建一个仅用于单元测试的单独项目,该项目将访问“主”项目中的文件(还不确定如何做到这一点)?

如果主应用程序和测试都在同一个项目中,那么我该如何运行测试而不运行应用程序,或者反过来呢?我尝试将Qt教程1中关于单元测试的文件合并到控制台项目中,但问题在于它们使用一个宏QTEST_MAIN(TestQString),该宏会扩展为一个main(...)函数。这会与main.cpp中的main(...)产生冲突。好吧,我可以将其中一个重命名,但问题仍存在——那么我如何运行测试或应用程序本身?如果我覆盖QTEST_MAIN宏(这是个坏主意),我会禁用测试。如果我在main.cpp中重命名main(...)函数,则实际应用程序永远不会被执行。我想,应该有一种方法可以为项目创建两个单独的可执行文件,一个运行单元测试,另一个启动应用程序,但我无法弄清楚如何进行操作。

1个回答

9

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

我使用这篇博客上介绍的非常方便的测试运行器


我刚刚几分钟前偶然发现了那篇文章,确实看起来是正确的方法 - 谢谢! - Puchatek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接