Mock 객체 활용법

class CTest
{
protected:
 int m_Test;
 void Test() {}
};

class CMockTest : public CTest
{
public:
 using CTest::m_Test; // 부모 클래스의 멤버를 public 으로 쓰겠다.
 using CTest::Test;
};

int _tmain(int argc, _TCHAR* argv[])
{
 CTest a;
 //a.m_Test = 1;  // protected 멤버 변수 접근할 수 없음.
 //a.Test();   // protected 멤버 함수 접근할 수 없음.

 CMockTest* pMockTest = (CMockTest*)(&a);
 pMockTest->m_Test = 1;  // CMockTest 로 강제 캐스팅하면 접근할 수 있음.
 pMockTest->Test();
 // a 가 CMockTest 객체가 아니어도 이렇게 쓸 수 있다는 점에 주의

 return 0;
}

결론 :
 테스트를 작성할 때는 기존 코드를 최대한 건드리지 않아야 한다.
 protected 따위는 보호받고 있다고 볼 수 없다. 차라리 안전한 테스트 코드를 작성해 두는 것이 더 좋다.
 강제 캐스팅 무섭다.

by 박PD | 2008/04/25 17:21 | 개발 이야기 | 트랙백(1) | 핑백(1) | 덧글(3)

트랙백 주소 : http://parkpd.egloos.com/tb/1746713
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Jupi's Home at 2008/04/29 11:42

제목 : Mock 객체 활용법
얼마전에 기존에 꽃집총각이 만들어놓은 TDD를 수정작업을 하였는데, Test하려는 객체가 많이 변한 탓에 정확한 Test를 진행하기가 힘들었다. 왜냐하면 새로운 기능들이 많이 추가되면서, 기존에 직접접근해도 괜찮았던 객체들이 지금은 직접접근하면 로직이 깨지는 경우가 많아져서, 대부분을 protected밑으로 넣어버렸다. 그러다보니 내부 변수들의 getter함수들도 같이 사라져버렸고, 외부에서는 오직 필요한 기능에 의한 함수 호출로 해당 객체를 ......more

Linked at 끙애내꼬 : Mock 객체 활용법 at 2009/08/05 18:27

... 보호받고 있다고 볼 수 없다. 차라리 안전한 테스트 코드를 작성해 두는 것이 더 좋다. 강제 캐스팅 무섭다.출저: 박피디의 게임 아키텍트 http://parkpd.egloos.com/1746713 ... more

Commented by 엔에스알 at 2008/04/26 11:06
우왕. 저런 방법이 있었군요. 신기하네요.
좋은 것 배우고 돌아갑니다~
Commented by Jupi at 2008/04/26 12:15
와~좋네요. 안그래도 이번에 TDD를 구성하면서, protected밑에 있는 멤버들을 접근 못해서 정확한 Test하기가 힘들었는데, 정말 감사합니다.^^
Commented by 박PD at 2008/04/27 02:07
엔에스알, Jupi :
저도 C++ 을 오래 써 왔다고 생각했는데도 (그리고 TDD 를 1년 넘게 쓰고 있으면서도)
저런 게 되는 걸 지금까지 모르고 있었어요. ㅎㅎ
아직 배울게 참 많은 언어라고 생각합니다.

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>