在Qt单元测试中使用多个插槽测试多个类

在Qt单元测试中使用多个插槽测试多个类,qt,Qt,我在不同的地方看到了各种各样的解决方法,它们建议在创建单个测试执行时,编写自定义的main函数,而不是依赖QtQTEST\u main()宏来执行不同类的多个不同测试 如果我错了,请纠正我的错误,但是您是否可以只使用一个测试类,并根据需要使用尽可能多的插槽来测试任意多的类?只需在插槽的实现中实例化想要测试的类,并在该插槽中运行测试。然后,不同的插槽可能会实例化不同的类并运行不同的测试。单个QTEST_MAIN应该运行所有插槽测试,所以所有测试都会得到测试,对吗 以下是我读到的一些不使用QTEST

我在不同的地方看到了各种各样的解决方法,它们建议在创建单个测试执行时,编写自定义的
main
函数,而不是依赖Qt
QTEST\u main()
宏来执行不同类的多个不同测试

如果我错了,请纠正我的错误,但是您是否可以只使用一个测试类,并根据需要使用尽可能多的插槽来测试任意多的类?只需在插槽的实现中实例化想要测试的类,并在该插槽中运行测试。然后,不同的插槽可能会实例化不同的类并运行不同的测试。单个
QTEST_MAIN
应该运行所有插槽测试,所以所有测试都会得到测试,对吗

以下是我读到的一些不使用
QTEST\u MAIN
的替代技术:


当然,在一个测试类中,您可以有任意多的插槽。但是,迟早您会需要将测试分开并对它们进行分组,因为您有太多的测试无法将它们全部放在一个类中。您必须创建几个测试类

QTEST_MAIN
函数的初衷是只运行一个测试。如果您想测试几个类,并且可以彼此独立地进行测试,则可以将它们放在单独的测试类中,为每个类添加一个
QTEST_MAIN
宏,并将每个类编译为单独的可执行文件。另一个好处是,如果一个测试用例崩溃,其他测试将继续正常运行。缺点是您需要一个测试运行程序来运行所有测试并检查其结果,而qtestlib不提供运行程序。您可以编写自己的运行程序,也可以使用现有的运行程序()

这些选择包括:

  • 遵循QTestLib的范式。对不同的可执行文件进行单独的测试,以防止由于其他测试而导致测试失败
  • 将所有测试存储在一个类中。如果你的应用程序不是很小,这将非常不方便
  • 使用自定义主函数手动运行所有测试。这不是很糟糕,但也很不方便,因为您需要手动列出测试类
  • 使用另一个测试库。我更喜欢。它比qtestlib强大得多,它支持死亡测试,它自动注册和运行测试并计算结果。谷歌测试中没有这样的问题。请注意,您可以将许多有用的qtestlib特性(如
    QSignalSpy
    )与另一个测试框架一起使用

你能发布你找到的解决方法的链接吗?如果不知道人们为什么试图编写自定义
main
函数的背景,就很难回答这个问题。我认为您的方法是正确的,并且会起作用。我完全按照你描述的方式做了事情——每个测试槽测试不同的类。@RA。我用几个链接更新了这个问题。@OpenLearner请参见下面Pavel的答案。本质上,当您有很多类要测试时,不希望维护一个测试类来测试多个类。试想一下,如果你必须测试数百个甚至数千个类,那么测试类会是什么样子。你可以用谷歌测试来代替。我一直在想自动化测试报告,听起来谷歌测试在这方面也会更好。