내 클래스 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 *ptr_a = new A(new StubB);
ptr_a->m1();
방법 (M1)를 클래스 A의 인스턴스를 다음과 같은 코드의 방법 M1()를 호출하는 경우는 B의 방법 m2() B의 m2 때문에을 (호출) 가상하지 않습니다. 클래스 B는 다른 모듈의 레거시 코드입니다. 코드 을 변경하고 싶지 않지만 클래스 A의 코드를 변경하고 싶지는 않습니다.
이 종속성을 벗어나는 해결책은 무엇입니까?
두 번째 솔루션을 좀 더 자세히 설명 하시겠습니까? – metdos
나쁜 디자인 트릭을 가져 주셔서 감사합니다. 또한 두 번째 해결책에 대한 추가 설명이 필요합니다. – onurozcelik