我的A类依赖于类B. 下面是代码有没有办法打破单元测试的依赖关系?
//declaration
class A
{
public:
A(B *b);
~A();
void m1();
private:
B *ptr_b;
};
//implementation
A::A(B *b)
{
ptr_b = b;
}
A::~A()
{
delete ptr_b;
}
void A::m1()
{
ptr_b->m2();
}
我想打破这种依赖关系(单元测试)与下面的解决方案。 下面是代码
class FakeB : public B
{
public:
FakeB();
~FakeB();
virtual void m2() = 0;
};
class StubB : public FakeB
{
public:
StubB();
~StubB();
void m2();
}
但是当我实例A类和用下面的代码调用它的方法M1()
A *ptr_a = new A(new StubB);
ptr_a->m1();
方法M1()调用B的方法M2(),因为B的M2( )不是虚拟的。 B类是另一个模块的遗留代码,我不想更改其代码 ,但我也不想更改A类代码。
任何解决方案打破这种依赖?
你会详细介绍一下你的第二个解决方案吗? – metdos 2011-03-09 07:47:04
谢谢你的糟糕设计。另外我需要你的第二个解决方案的进一步解释 – onurozcelik 2011-03-09 07:49:42