假设你正在测试课程A
它有一个依赖注入 of B
其中有一个依赖注入C
.
所以你嘲笑B
但它唯一的构造函数需要注入C
,所以你必须嘲笑C
以及注入模拟的C
进入被嘲笑的地方B
然后才将其注入A
?
如果有 5 个连续的依赖关系怎么办?
有哪些替代方案?
I use 谷歌模拟,所以具体的答案也会有帮助。
埃米尔的想法是正确的,你应该依赖接口而不是具体的类。所以在你的例子中它会是这样的:
#include <iostream>
using namespace std;
class C {
public:
int x;
};
class B {
public:
~B(){};
virtual void doSomething() = 0;
};
class ConcreteB : public B{
public:
ConcreteB(C c) : m_c(c) {}
void doSomething(){
std::cout << "HelloWorld" << std::endl;
}
private:
C m_c;
};
class A{
public:
A(B *b): m_b(b){}
void functionToTestWithSideEffect(){
m_b->doSomething();
}
private:
B *m_b;
};
//#include <gmock/gmock.h>
int main() {
C c;
c.x = 42;
ConcreteB b(c);
A a(&b);
a.functionToTestWithSideEffect();
return 0;
}
在你的测试中,你创建一个不依赖于任何类C的模拟B。然后你只用B测试接口。这样你就打破了A对C的依赖。创建一个不依赖于C的模拟B是很漂亮的简单的:
class MockB : public B {
public:
MOCK_METHOD0(doSomething, void());
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)