【问题标题】:Google Mock and Catch.hpp IntegrationGoogle Mock 和 Catch.hpp 集成
【发布时间】:2015-08-09 17:46:21
【问题描述】:

我非常喜欢用于测试的 catch.hpp (https://github.com/philsquared/Catch)。我喜欢它的 BDD 风格和它的 REQUIRE 语句,它的断言版本。但是,catch 不附带模拟框架。

我正在处理的项目有 GMock 和 GTest,但我们也将 catch 用于一些项目。我想将 GMock 与 catch 一起使用。

我在宏 FAIL 和 SUCCEED 的 catch.hpp 和 gtests 头文件中发现了 2 个冲突。由于我没有使用 TDD 样式,而是使用 BDD 样式,因此我将它们注释掉,因此我检查了它们在 catch.hpp 中的其他任何地方都没有引用。

问题:使用EXPECT_CALL() 不会返回任何内容,也不会通过回调来了解 EXPECT 是否通过。我想做类似的事情:

REQUIRE_NOTHROW(EXPECT_CALL(obj_a, an_a_method()).Times(::testing::AtLeast(1)));

问题:如果EXPECT_CALL 失败(或返回值),我如何获得回调

【问题讨论】:

  • trompeloeil 听起来很有趣,旨在与 Catch 一起使用。就个人而言,我会在 Google 的庞然大物之前尝试这样做。

标签: c++ unit-testing googlemock


【解决方案1】:

编辑:想出了如何集成它并在这个 github repo https://github.com/ecokeley/catch_gmock_integration 中放一个例子@


经过几个小时的搜索,我回到 gmock 并阅读了一堆关于它的内容。在"Using Google Mock with Any Testing Framework" 找到这个:

::testing::GTEST_FLAG(throw_on_failure) = true;
::testing::InitGoogleMock(&argc, argv);

这会导致在失败时引发异常。他们推荐"Handling Test Events" 以获得更无缝的集成。

class MinimalistPrinter : public ::testing::EmptyTestEventListener {
  // Called after a failed assertion or a SUCCEED() invocation.
  virtual void OnTestPartResult(const ::testing::TestPartResult& test_part_result) {
    printf("%s in %s:%d\n%s\n",
         test_part_result.failed() ? "*** Failure" : "Success",
         test_part_result.file_name(),
         test_part_result.line_number(),
         test_part_result.summary());
  }
}

【讨论】:

    【解决方案2】:

    由于 1.8.0 版中的宏 FAIL 和 SUCCEED,gmock 在 gtest.h 中添加了以下内容:

    #if !GTEST_DONT_DEFINE_FAIL
      # define FAIL() GTEST_FAIL()
    #endif
    
    #if !GTEST_DONT_DEFINE_SUCCEED
      # define SUCCEED() GTEST_SUCCEED()
    #endif
    

    因此,通过将 GTEST_DONT_DEFINE_FAIL 和 GTEST_DONT_DEFINE_SUCCEED 添加到预处理器定义中,您将避免冲突

    【讨论】:

      【解决方案3】:

      cppbdd 项目中还有 gtestbdd,它在 gtest 的单个标头中添加了 BDD 支持(而不是替换它)。它最近进行了改进,使参数化测试能够以 BDD 样式工作。自述文件中有一个教程:

      https://github.com/Resurr3ction/cppbdd

      【讨论】:

        【解决方案4】:

        我创建了一个如何将 GMock 与 Catch2 集成的小示例。

        https://github.com/matepek/catch2-with-gmock

        希望对某人有所帮助。

        免责声明:它不是防弹的。随意贡献和改进。

        【讨论】:

        • 还在使用 catch2 和 gmock?
        • 目前没有使用太多 C++。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 2012-04-05
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        • 2016-02-22
        相关资源
        最近更新 更多