RE: [Agile Beginners] C++ 로 작성하는 간단한 TDD질문

63 views
Skip to first unread message

석한울

unread,
Jun 28, 2010, 11:10:51 PM6/28/10
to ab...@googlegroups.com

아 이부분 잘못 작성했네요

assertTrue( strcmp("Hello, Wolrd", testOutput->getString()) ); 가 아니고

 

assertTrue( strcmp("Hello, Wolrd", testOutput->getString()) == STRING_EQUAL );

-----Original Message-----
From: "석한울"<hanur...@naver.com>
To: ab...@googlegroups.com
Cc:
Sent: 10-06-29(화) 12:08:19
Subject: [Agile Beginners] C++ 로 작성하는 간단한 TDD질문

보통 TDD예제를 본면 특정 라이브러리나 클래스를 기반으로 TDD를 하는것들이 많은것 같습니다.

(그냥 책에 나온 예제나 그런것들 )

 

그리고 C++의 예제는 별로 없는것 같습니다

(아시는분들 알려주세요 ㅜㅜ)

 

오늘 작업을 하다가 오늘은 꼭 실패하는 테스트를 먼저 작성하고 작업을 시작해야지라고 마음을 먹었습니다.

그래서 가장 간단하게 생각한것이 프로그램이 시작되면. 내가 작성한 클래스의 인스턴스가 적절히 생성되고 들고있는가? 를 먼저 테스트 하기로 했습니다.

 

기존에 있던 프로그램 : Legacy

새로 만든 Class : MyClass

 

TEST( testPresentMyClass ) {

    AssertNotNull( legacy->m_pMyClass );
}

 

위처럼 시작을 하려고 했습니다.

음.. 그런데 갑자기 여러가지 문제가 생겼습니다.

 - Legacy 클래스는 가장 최상단에 있는 클래스가 아닌데..

 - 프로그램이 동작중에 lagacy가 myclass를 가지고 있는지를 테스트 하고싶은데 당장 어디서 부터 시작해야 할지 막막하더군요.

 

프로젝트가 Win32프로젝트인데.. 일단 Dll이나 Lib 프로젝트가 아니면. export된 함수나 클래스가 없기때문에

접근을 할수가 없을꺼 같은데.. 맞나요?

 

그렇다면 테스트를 하고자 하는 프로젝트를 그냥 Win32프로젝트로 만들면 안되고 Lib나 Dll 프로젝트로 만든다음에

그안에 아예 처음부터 클래스로부터 시작을 해서 시작 함수를 제공하고 그 실제 프로젝트에서는 그 클래스를 생성하고

Start() 와 같은 인터페이스를 제공해서 단순히 그걸 호출하는 식으로 만들어야 테스트가 가능하겠다라는 생각이 들었는데요..

 

그렇다면 단순히 콘솔창에 Hello, World를 찍는 프로그램을 TDD로 만든다고 한다면.. 다음과 같은것이 필수적으로 필요하다고 생각이 들었습니다.

   - HelloWorld Class

   - Output Class

   - Ooutput클래스를 상속받는 TestHelloWorldOutput

 

그래서 다음처럼 테스트를 하는겁니다.

 

const int STRING_EQUAL = 0;

 

TEST(testHelloWorld) {

    HelloWorld* pHelloWorld = new HelloWorld();

    Output* testOutput = new TestHelloWorldOutput();

    pHelloWorld->m_pOutput =  testOutput;      // Get/Set 메소드를 만들면 또 테스트를

                                                                  //만들어야 할것 같아서그냥 맴버 변수로..

    pHelloWorld->Run();

    assertTrue( strcmp("Hello, Wolrd", testOutput->getString()) );

}

 

이런식으로 짜야 한다고 생각을 했는데.. 처음 시도를 해보는거라 잘 모르겠네요..

 

C++프로젝트 같은경우는 테스트 가능하게 만들려면 프로젝트 자체를 Lib나 DLL로 만들어서

WinMain이나 main()함수 같은곳에서는 단순히 Run을 실행한다던지만 하는식으로 접근을 해야할까요?

 

Win32프로젝트 같은경우는 가장 처음 생성되는 클래스에서는 메시지 루프는 어떻게 처리를 해야할까요

쓰래드를 생성해줘야 할까요?

 

Win32프로젝트 같은 경우는 Message 루프도 만들어서 돌려줘야 하고..

어떻게 실제 동작하는 프로젝트를 테스트 하시나요??

 

간단히 Window가 생성되어있고 화면에 Hello,World가 찍혀있는 프로그램을 TDD로 만든다고 가정할때

어떻게 접근을 하면 좋을까요.

이것부터 하면 좋은 시작점을 얻을수 있지 않을까 해서 질문을 드립니다.

 

아님 접근부터 잘못되었을까요??

--
Google 그룹스 'Agile Beginners' Q&A' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ab...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 abqna+un...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/abqna?hl=ko에서 그룹을 방문하세요.

석한울

unread,
Jun 28, 2010, 11:08:19 PM6/28/10
to ab...@googlegroups.com

Joonhwan

unread,
Jun 29, 2010, 5:43:49 PM6/29/10
to ab...@googlegroups.com
저는 저 고민을 지금도 하고 있는데요. 
GUI 즉,  ActiveObject(=Thread + Event Queue + Event Handler)와 같은 걸 테스트하려면 
Mock 이란걸 써야 한다고 합니다. Win32로만 프로그래밍하는 경우는 요즘 거의 없는 것 같은데,


이걸 한번 보시죠.. 

2010. 6. 29., 오후 12:10, 석한울 작성:
Reply all
Reply to author
Forward
0 new messages