gpt4 book ai didi

c++ - 如何在 C++ 中 stub /模拟非指针成员变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:57 24 4
gpt4 key购买 nike

很多单元测试的网站都说要提取一个接口(interface)和接口(interface)的代码(这是有道理的),但这需要通过指针使用多态性。是否可以在没有指针的情况下完成此操作,这样我就不必修改生产代码?我宁愿不使用指针和管理内存。

  • 允许条件编译。
  • 我专门为我的 stub /模拟使用 gmock。

我研究过的一些事情是:

  • 使用引用
    • 涉及编写特殊的复制构造函数或使其不可复制
    • 仍然需要使用 new/delete 来管理内存
    • 不确定这是否会导致不可预见的问题
  • 通过代码生成创建指针包装类的集合。界面保持不变,但增加了一些测试方法。
    • 看起来可以,但需要维护
    • 下面是我的意思的例子

请注意 gmock 模拟对象不可复制,因此我不能构造函数注入(inject)它们。 ( https://groups.google.com/forum/#!topic/googlemock/GD73UXjQowE/discussion )

问题示例

class Example
{
public:
Example();
~Example();

private:
// I want to stub out _foo.
Dependency _foo;
};

指针包装类示例

#ifndef UNIT_TEST
Foo _foo;
#else
PtrWrapFoo _foo;
#endif

...

_foo.setImpl(StubFoo *aStubFoo);

...

void PtrWrapFoo::doSomething()
{
_impl->doSomething();
}

最佳答案

过去,我在一个单独的编译单元中实现了Dependency,并链接到那个而不是原来的编译单元。

这就是 Michael Feathers 所说的 Link Seam .

关于c++ - 如何在 C++ 中 stub /模拟非指针成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16061361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com