2008년 04월 25일
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 | 2008/04/25 17:21 | 개발 이야기 | 트랙백(1) | 핑백(1) | 덧글(3)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : Mock 객체 활용법
얼마전에 기존에 꽃집총각이 만들어놓은 TDD를 수정작업을 하였는데, Test하려는 객체가 많이 변한 탓에 정확한 Test를 진행하기가 힘들었다. 왜냐하면 새로운 기능들이 많이 추가되면서, 기존에 직접접근해도 괜찮았던 객체들이 지금은 직접접근하면 로직이 깨지는 경우가 많아져서, 대부분을 protected밑으로 넣어버렸다. 그러다보니 내부 변수들의 getter함수들도 같이 사라져버렸고, 외부에서는 오직 필요한 기능에 의한 함수 호출로 해당 객체를 ......more
... 보호받고 있다고 볼 수 없다. 차라리 안전한 테스트 코드를 작성해 두는 것이 더 좋다. 강제 캐스팅 무섭다.출저: 박피디의 게임 아키텍트 http://parkpd.egloos.com/1746713 ... more
좋은 것 배우고 돌아갑니다~
저도 C++ 을 오래 써 왔다고 생각했는데도 (그리고 TDD 를 1년 넘게 쓰고 있으면서도)
저런 게 되는 걸 지금까지 모르고 있었어요. ㅎㅎ
아직 배울게 참 많은 언어라고 생각합니다.