【问题标题】:comparing QTest with other frameworks将 QTest 与其他框架进行比较
【发布时间】:2011-06-20 06:15:11
【问题描述】:

您能否将流行的 C++ 单元测试框架与 Qt 的 QTest 进行比较?

(cppunit、boost 测试、google 测试等)

优点缺点是什么? 谢谢。

注意:GUI 测试对我们来说不是很重要。

【问题讨论】:

    标签: c++ cppunit googletest boost-test qtestlib


    【解决方案1】:

    QTest 是我所知道的唯一用于单元测试 UI 组件的框架。我们使用它取得了一些成功,但坚持使用 Boost.Test 进行常规单元测试。

    【讨论】:

      【解决方案2】:

      根据我的经验,我不能推荐 Qt 测试框架。可以提到的两个可能的优点是:

      • QSignalSpy:验证发出的信号(仅对 Qt 有用),但这也可以与其他测试框架一起使用
      • 易于编写参数化测试

      主要缺点:

      • 默认不支持fixture,需要在setUp tearDown中解决
      • QCOMPARE 无法比较不同类型的值。例如,比较两个具有不同比率的std::chrono::duration 是不可能的,尽管它们具有同等的可比性。只为QCOMPARE投稿很烦人

      Boost 简单易用,在大多数情况下都能正常工作,毫无意外。

      Google 测试框架的主要优势是对模拟的支持。但是这个特性也可以用于其他框架。它有很多很棒的特性,比如定义预期的调用序列、自定义匹配器、断言可以是人类可读的。但熟悉这些功能需要时间(假设您需要它们)。

      我想再提一个框架:Catch。它是一个只有标头的框架,只有很少的断言。例如。 REQUIRE(a == b) 将起作用,ab 的值将在失败时解决。不需要夹具类或样板,您只需在测试用例中定义部分,它将执行 N 次,具有不同的部分。它非常简单,人类可读。另一方面,默认编译需要时间。

      【讨论】:

        【解决方案3】:

        QtTest(直到 Qt 5.7)不提供在 uut 中期待断言的能力,而 Googletest 确实有死亡测试的概念,并且可以有一个测试断言的测试。我们发现这在 Googletest 中很有用,但令人烦恼的是 QtTest 中缺少它!

        【讨论】:

          猜你喜欢
          • 2021-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多