【问题标题】:TestPlugInRunnerd.exe + gmockTestPlugInRunnerd.exe + gmock
【发布时间】:2011-03-18 08:51:07
【问题描述】:

我们将 cppunit 单元测试构建为 dll 并将其加载到 TestPlugInRunnerd.exe 以显示我们的结果。我们编写自己的模拟,但我想开始使用模拟框架,例如 gmock。

我下载了 gmock 并链接到它,没有太多问题。我已经使用 gmock 编写了一个模拟,它编译得很好。但后来我在 gmock 常见问题解答中阅读了以下内容:

如果您想使用 Google Test 以外的其他东西(例如 CppUnit 或 CxxTest)作为测试框架,只需将上一节中的 main() 函数更改为: int main(int argc, char** argv) { // 以下行导致 Google Mock 在失败时抛出异常, // 这将被您的测试框架解释为测试失败。 ::testing::GTEST_FLAG(throw_on_failure) = true; ::testing::InitGoogleMock(&argc, argv); ...无论您的测试框架需要什么... } 这种方法有一个问题:它使 Google Mock 有时会从模拟对象的析构函数中抛出异常。对于某些编译器,这有时会导致测试程序崩溃。您仍然可以注意到测试失败了,但这不是优雅的失败。

我显然没有主目录。我需要做什么才能让 gmock 使用我的 dll?我应该考虑 gmock 的替代品吗?

谢谢,

巴里

【问题讨论】:

    标签: c++ tdd cppunit gmock


    【解决方案1】:

    首先,您不可能没有主服务器。否则你将如何执行你的单元测试?

    其次,您可以创建一个类的静态变量,在其中调用这两个函数,如下所示:

    struct GmockInitializer
    {
      GmockInitializer()
      {
        ::testing::GTEST_FLAG(throw_on_failure) = true;
        ::testing::InitGoogleMock(0,0);  // << not sure about this. might not work
      }
    };
    GmockInitializer gmockInitializer;
    

    【讨论】:

    • 谢谢,但我刚刚发现您可以使用环境变量 GTEST_THROW_ON_FAILURE=1
    • @Baz 好的,但是你如何初始化它?
    • @BЈовић 您不需要 DLL 中的 main,只需要一个调用 gmock 初始化并运行测试的外部函数。然后可以通过加载 DLL 并调用外部函数从 TestPlugInRunnerd.EXE 调用此函数。我猜他就是这样做的。
    猜你喜欢
    • 2018-08-26
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多