QT单元测试(autotest,googletest,qtest)相关问题

autotest

autotest,如果你的项目模板列表中有此模板,应该是不会来看这篇文档的。当然这篇文档也只是一些基础的内容。
在这里插入图片描述

很不幸我就没有,

在这里插入图片描述

但我们有test project,我们回到autotest选择框架的界面。
在这里插入图片描述

在这个界面中可以看到,autotest中可以选择具体的测试框架,在test project中,是一一对应的,也是说如果你要使用autotest项目模板可以看一眼对应教程的具体使用的单元测试框架在此处具体选择,再接上你看的教程。
也就是说上面页面中选择什么框架,下面页面你就选择什么框架就行
在这里插入图片描述

googletest

同autotest,如果你能直接选到autotest再选gooletst或者直接选择gooltest,那你也不会看到这份文档。

如果你也需要autotest项目模板来选择使用gooletest框架,那你可以移步autotest部分。

需要注意的是,如果在gooletest模板界面,选择框架时,会有头文件和共享库两个选择。

如果你在选择共享库出现了,gtest not fond类似的报错信息,你可以尝试仅头文件。(个人经验)
在这里插入图片描述

Qtest

同上,中间就不写了,你也不用看这份文档。

Qtest个人使用情况

如果你直接在项目中使用,我不建议你这样使用,应该用子项目的形式包含在其中。下面是我的经历,希望能告诉你为什么

这一部分是解决在参照官方文档使用Qtest中遇到的问题。

Chapter 1: Writing a Unit Test | Qt Test 6.8.2

QTEST_MAIN(TestQString)
#include "testqstring.moc"

原文是这样解释的:

QTEST_MAIN() 宏扩展为一个简单的main() 方法,运行所有测试函数。请注意,如果测试类的声明和实现都在.cpp 文件中,我们还需要包含生成的 moc 文件,以使 Qt 的自省功能正常工作。

在此处遇到了moc文件不存在的问题,或者main函数重复定义的问题。

关于moc文件,我就不解释了,实力不够,读者有兴趣的可以自行搜索。

在这里查阅了众多论坛后得到的一个解决方案为

  1. 不需要moc文件,原文为在头文件中不需要
  2. 修改main函数为QTEST_MAIN(TestQString)

在这里插入图片描述

于是我注释了原本的main函数,并且在原main函数位置使用

#include "testqstring.h"
QTEST_MAIN(TestQString)

的方式启动测试用例成功。这就很不科学,运行单元测试怎么会要注释原项目中的main函数呢,所以这就是为什么你不能直接在项目中使用qtest来创建一个测试类来进行单元测试。

正确的方案应该是使用创建一个子项目模板,在子项目中添加待测试项目,与测试项目进行测试。

结语

  1. 大佬喜欢旧版本qt
  2. 大佬更新了qt不喜欢更新教程
  3. 我喜欢用新版本
  4. 我爱用新版本
  5. 也许可以加一个,官方更新文档不是很勤快

希望这份文档对你有所帮助。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐