E D R , A S I H C RSS

Cxx Test

http://cxxtest.sourceforge.net
C++ 의 경우는 언어차원에서의 리플랙션을 지원하지 않기 때문에 테스트를 추가하는 부분이 자바나 파이썬 등에 비해 상당히 귀찮다. 그에 대한 대안으로 CUT 등의 C UnitTestFramework 의 경우 외부에서 Perl 등으로 작성한 스크립트언어로 테스트실행과 관련한 Runner 를 코드제너레이팅하는 방법을 쓰고 있다.

CxxUnitCUT의 C++버전이라 봐도 약간 상통하리라 본다.(오래되기는 CxxUnit 이 더 오래되었던걸로 기억) Python 이나 Perl 의 코드제너레이터 스크립트를 이용, Runner화일을 만들어준다. 이를 컴파일하여 실행하면 테스트가 실행된다.


1002의 경우 요새 CxxUnit 을 사용중. 밑의 스크립트를 Visual Studio 의 Tools(일종의 External Tools)에 연결시켜놓고 쓴다. Tool 을 실행하여 코드제너레이팅 한뒤, 컴파일. (cxxtestgen.py 는 CxxTest 안에 있다.) 화일 이름이 Test 로 끝나는 화일들을 등록해준다.

~cpp 
from os import *
from os.path import *

def toStr(aList):
    return ' '.join(aList)

def main():
    testFiles = []
    for eachFile in listdir("."):
        if isfile(eachFile):
            lastestPeriod = eachFile.rfind(".")
            fileName = eachFile[:lastestPeriod]
            extension = eachFile[lastestPeriod+1:]
            if fileName.endswith("Test"):
                print fileName, extension 
                testFiles.append(eachFile)
    '''cmd= "python cxxtestgen.py --runner=ParenPrinter --gui=Win32Gui -o runner.cpp "+toStr(testFiles)'''

    cmd= "python cxxtestgen.py --runner=ParenPrinter -o runner.cpp "+toStr(testFiles)
    print cmd
    system(cmd)

if __name__=="__main__":
    main()


단점이 있다면 테스트 상속이 안된다는 점이다. 개인적으로 MockObject 만들어 인터페이스 테스트 만든뒤 RealObject 를 만들어 테스트하는 경우가 많은 만큼 귀찮다. (테스트의 중복으로 이어지므로) 어흑.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1072 sec