'TDD'에 해당되는 글 5건

  1. 2010/08/23 [리뷰]테스트주도개발 TDD 실천법과 도구
  2. 2008/10/06 CxxTest 설정 방법
  3. 2008/05/22 CxxTest 매크로들
books2010/08/23 10:10


몇년전부터 TDD를 업무에 적용해보려고 몇번의 시도를 해봤습니다.
그러나 매번 흐지부지 끝나버리게 되었습니다.

그렇게 되었던 몇가지 이유는 귀찮음과 정보의 부재였습니다.
그리고 가장 큰 문제는 회사에서 요구하는 '무조건! 빨리빨리!'였습니다.
결과물이 나오는 것과 직접적으로 관련이 없는 내용의 코딩과 학습을 뭐하러 하느냐는....

그런데 이번에는 TDD 실천법과 도구라는 책을 보니...
다시한번 TDD를 적용해보고 싶은 욕구가 계속해서 들더군요..
물론 저는 자바개발자는 아닙니다. C/C++로 주된 개발을 하니
이 책을 기반으로 또 다시 학습을 해야겠지만,

그래도 인터넷을 통해서 개론만을 보고 잘하지도 못하는 영어를 읽어가며
시간을 보내던 때보다는 좀더 좋은 결과를 가져올수 있을것만 같습니다.

아직까지는 책을 읽어보기만 했지만..
이제는 이 책을 기반으로 하나하나 적용시켜볼까 합니다.

Posted by redef
TAG TDD, 리뷰

댓글을 달아 주세요

sw2008/10/06 18:15

CxxTest 설정 방법

1. 우선 파이썬을 설치를 합니다.(펄을 설치해도 됩니다.)

2. 파이썬의 PATH를 등록해줍니다.

3. CxxTest를 압축해제 후 놓고 싶은곳에 놓아 둡니다.
   저는 C:\ 에다가 놓았습니다.

4. VisualStudio에서 디렉토리를 등록 해 놓습니다.
   저는 현재 주로 작업을 하는게 VS2003이라서 이걸 기준으로 하겠습니다.
   <도구> -> <옵션> -> <프로젝트> -> <VC++ 디렉토리> -> <포함파일> 에서 "C:\cxxtest" 로 등록을 했습니다.


5. 아래의 내용을 타이핑 한 후 cxxtest폴더에 CxxTestMakeRunner.py로 저장을 해 놓습니다. 파일명이야 뭐 아무래도 상관없습니다.
   현재 프로젝트 경로상에서 파일명중에 뒤에 Test가 붙은 것들로 runner.cpp 파일을 만드는 것 같습니다.

====================================================================================================================

import os


def toStr(aList):

           return ' '.join(aList)


def main():

           testFiles = []

           for eachFile in os.listdir("."):

                     if os.path.isfile(eachFile):

                                lastestPeriod = eachFile.rfind(".")

                                fileName = eachFile[:lastestPeriod]

                                extension = eachFile[lastestPeriod+1:]

                                if fileName.endswith("Test"):

                                          print fileName, extension

                                          testFiles.append(eachFile)

                    

           files = toStr(testFiles)

           if files == '':

                     print "No Test Files... Make XxxText.xxx..."

           else :

                     cmd= "python c:\cxxtest\cxxtestgen.py --runner=ParenPrinter --gui=Win32Gui -o runner.cpp "+toStr(testFiles)                    

                     print cmd

                     os.system(cmd)


if __name__=="__main__":

           main()


====================================================================================================================

6. Visual Studio에서 환경설정을 합니다.
   <도구> -> <외부도구>-><추가>를 눌러서 툴을 등록합니다.
  
    제목 : Make CxxTest Runner
   명령 : C:\Python25\python.exe
   인수 : C:\cxxtest\CxxTestMakeRunner.py
   초기 디렉터리 : $(ProjDir)
  
   과 같이 등록을 해줍니다.
   "출력 창 사용" 을 체크를 해주어서 visual studio의 출력창에 결과가 보일 수 있게 해줍니다.


7. CString이나 MFC 관련 내용을 사용할 경우에는 위의 CxxTestMakeRunner.py만으로는 사용을 할 수가 없습니다.
   방법으로는 runner.cpp 파일을 변경해주던가 아니면 위의 스크립트를 변경해서 사용해야 합니다. 또는 테스트 하고자 하는 클래스 파일에 #include <stdafx.h>를 추가를 하는 방법도 있습니다.

   afx.h => MFC basic
   afxwin.h => MFC core and standard components
   afxext.h -> MFC extensions
   afxdtctl.h => MFC support for Internet Explorer 4 Common Controls
  
   각 헤더를 필요에 따라 runner.cpp 파일에 추가해 줘도 됩니다.
   아니면 위의 스크립트 중에
   cmd= "python c:\cxxtest\cxxtestgen.py --runner=ParenPrinter --gui=Win32Gui -o runner.cpp "+toStr(testFiles)
   이 부분을
   cmd= "python c:\cxxtest\cxxtestgen.py --runner=ParenPrinter --gui=Win32Gui --include=afx.h --include=afxwin.h -o runner.cpp "+toStr(testFiles)
   이런식으로 필요한 헤더를 추가해주는 방법도 있습니다.

   3가지 방법중에 필요에 따라서 적당한 걸 골라서 사용하면 좋을것 같습니다.


8. 테스트를 실행해 보면 테스트가 어떻게 되는지 볼 사이도 없이 창이 사라져 버립니다. 이를 수정하기 위해서는 cxxtestgen.py를 바꿔 주어야 합니다.
   cxxtestgen.py 에서 writeMain( output ) 함수를 찾습니다.

   output.write( ' return CxxTest::GuiTuiRunner<CxxTest::%s, CxxTest::%s>( argc, argv ).run();\n' % (gui, runner) )
   위의 부분을 아래와 같이 고쳐줍니다.
   output.write( ' int res = CxxTest::GuiTuiRunner<CxxTest::%s, CxxTest::%s>( argc, argv ).run();\n getchar();\n return res;\n' % (gui, runner) )


이렇게 해서 CxxTest를 사용하기 위한 설정이 끝났습니다.


by Redef ( http://www.redef.pe.kr )

참조 :
http://user.chol.com/~nya/doc/CnCPP/CxxTest/CxxTest4MSVC6setup.htm : CxxTest for MSVC6 setup
http://user.chol.com/~nya/doc/CnCPP/CxxTest/CxxTestMSVC6HowTo.htm : CxxTest for MSVC6 HowTo
http://aego.pe.kr/CxxTest.html : VC 6.0에서 CxxTest 활용
http://javawork.egloos.com/741731 : CxxTest 설정

==============================2008년10월6일 추가=============================
테스트 ui창이 필요없이 console창만이 필요하다 하실때는
CxxTestMakeRunner.py에서 --gui=Win32Gui 이부분을 제거 해줍니다.
cmd= "python c:\cxxtest\cxxtestgen.py --runner=ParenPrinter -o runner.cpp "+toStr(testFiles)

cxxtestgen.py에서 동일하게 writeMain(output) 을 찾아서

output.write( ' return CxxTest::%s().run();\n' % runner )

위의 부분을 아래와 같이 수정해 줍니다.

output.write( ' int ret = CxxTest::%s().run();\n getchar();\n return ret;\n' % runner )
Posted by redef

댓글을 달아 주세요

sw2008/05/22 15:21


CxxTest 매크로들

  • TS_FAIL(message)
    • 무조건 실패
  • TS_ASSERT(expr)
    • expr이 true인지 확인
  • TS_ASSERT_EQUALS(x, y)
    • x == y 인지 확인
  • TS_ASSERT_SAME_DATA(x, y, size)
    • 두 버퍼가 같은지 확인
  • TS_ASSERT_DELTA(x, y, d)
    • x와 y가 d의 범위내에서 동일한 확인
  • TS_ASSERT_DIFFERS(x, y)
    • x와 y가 같지 않은지 확인
  • TS_ASSERT_LESS_THAN(x, y)
    • x < y 인지 확인
  • TS_ASSERT_LESS_THAN_EQUALS(x, y)
    • x <= y 인지 확인
  • TS_ASSERT_PREDICATE(R, x)
    • R(x) 확인
  • TS_ASSERT_RELATION(R, x, y)
    • x R y 을 확인한다.
  • TS_ASSERT_THROWS(expr, type)
  • TS_ASSERT_THROWS_EQUALS(expr, arg, x, y)
  • TS_ASSERT_THROWS_ASSERT(expr, arg, assertion)
  • TS_ASSERT_THROWS_ANYTHING(expr)
  • TS_ASSERT_THROWS_NOTHING(expr)
    • 예외를 확인한다
  • TS_WARN(message)
    • 경고를 출력한다
  • TS_TRACE(message)
    • 정보메세지를 출력한다
Posted by redef
TAG CxxTest, TDD

댓글을 달아 주세요