【问题标题】:HippoMocks: is it possible to mock non-virtual methods?HippoMocks:是否可以模拟非虚拟方法?
【发布时间】:2015-04-16 13:08:36
【问题描述】:

我开始使用 HippoMocks 来编写单元测试。我想知道是否可以模拟非虚拟类方法?

乍一看代码似乎表明该框架仅支持虚拟方法。但由于它支持模拟简单的 C 函数,因此应该可以对非虚拟类方法执行相同的操作。

有没有办法做到这一点?

【问题讨论】:

  • 一个简单的方法是在被测类的所有非虚拟方法前面添加一个说明符TEST_VIRTUAL,并在单元测试上下文中构建时将其定义为virtual。但这只有在您不介意仅仅为了可测试性而修改被测代码时才可以,这可以说不是最干净的单元测试方法。我只会将此作为最后的手段。

标签: c++ unit-testing mocking hippomocks


【解决方案1】:

这不是不可能的,但它会导致非常奇怪的使用机制——或者说没有线程安全的可能性。

C 函数总是被嘲笑。在这种情况下,它总是重定向到模拟,你不能再调用原来的。

C++ 虚函数仅针对请求的对象进行模拟,任何其他对象仍将在那里具有常规函数。

C++ 非虚函数看起来像一个虚函数,但只能在每个类级别上模拟。您的编译器也很可能会内联这些函数,使其不太可靠。

我从某人那里得到了一个补丁,只是盲目地应用它,它遇到了所描述的问题。您需要 100% 确保对该成员函数的任何访问都不是内联的,这几乎是不可能的。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多