0

我在不同的地方看到了各种变通方法,建议在创建单个测试执行时编写自定义main函数,而不是依赖 Qt宏,该测试执行通过不同类的许多不同测试工作。QTEST_MAIN()

如果我错了,请纠正我,但你不能只拥有一个测试类并拥有尽可能多的插槽来测试你想要的尽可能多的类吗?只需在插槽的实现中实例化您想要测试的所需类并在该插槽中运行您的测试。然后,不同的插槽可能会实例化不同的类并运行不同的测试。单曲QTEST_MAIN应该通过你所有的插槽测试,所以一切都得到了测试,对吧?

以下是我读过的一些不使用的替代技术QTEST_MAIN

https://sites.google.com/a/embeddedlab.org/community/technical-articles/qt/qt-posts/creatingandexecutingasingletestprojectwithmultipleunittests

https://stackoverflow.com/a/12207504/768472

4

1 回答 1

2

当然,您可以在测试课程中拥有尽可能多的插槽。但是迟早您需要将测试分开并将它们分组,因为您有太多测试无法将它们全部放在一个类中。你将不得不创建几个测试类。

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

选项包括:

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