使用c++ /Gmock进行中间模拟
Mock in the Middle with C++/Gmock
我有一个类a,它在构造函数中实例化了类B的对象。我想用b的模拟对象测试A
不,我不能传递B的对象作为参数。还有别的办法吗?
我看到了一篇文章http://www.ibm.com/developerworks/library/j-mocktest/index.html,其中"Mock in the Middle"是一个有趣的主题,但那是在Java中。在c++中可能吗?
class B {...};
class A {
private:
B* b;
public:
A() {
b = new B();
}
~A() {..}
};
编辑:一般来说,对象可以根据需要在其他方法中创建。例如,
class A {
...
int doSomething() {
// Create an object of class B
b = new B();
}
};
可以使用工厂模式
给定此代码
class B {
public:
virtual std::string name() { return "B::name"; }
virtual ~B() {}
};
class A {
private:
std::unique_ptr<B> b;
public:
A() {}
void createB() {
b.reset(new B); // you want to replace `new B` with something else right?
}
void print() {
std::cout << (b ? b->name() : std::string()) << std::endl;
}
~A() {}
};
带工厂功能
class A {
private:
std::unique_ptr<B> b;
public:
std::function<std::unique_ptr<B>()> b_maker;
A() {
// default maker
b_maker = []{ return std::unique_ptr<B>(new B); };
}
A(std::function<std::unique_ptr<B>()> func) {
b_maker = func;
}
void createB() {
b = b_maker();
}
void print() {
std::cout << (b ? b->name() : std::string()) << std::endl;
}
~A() {}
};
创建A与默认B相同
A();
,现在你可以给模拟B提供
A([]{return std::unique_ptr<B>{new MockedB};});
现场演示
你也可以使b_maker
成为一个全局变量,这样你就不需要传递它(但我不建议给它)
您可以使用AbstractBFactory
, BFactory
, MockBFactory
的复杂方法来完成,但它的开销太大,看起来像Java…
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- 2D数组来自文本输入,中间有空格
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何模拟不同边数的骰子滚动?
- 模拟持久按键
- 使用SIR模型的疾病爆发模拟
- 递归形成字符串中所有数字字符的中间和?
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- 链表错误的中间
- 转发变量参数列表以模拟 std::thread
- 为什么我们不能在模板专业化的开始/中间使用可变参数模板(以及如何模拟)?
- 使用c++ /Gmock进行中间模拟