http://cxxtest.sourceforge.net
C++ ì�˜ 경우는 언어차ì›�ì—�서ì�˜ 리플랙션ì�„ ì§€ì›�하지 않기 때문ì—� 테스트를 추가하는 부분ì�´ ìž�바나 파ì�´ì�¬ 등ì—� 비해 ìƒ�당히 귀찮다. ê·¸ì—� 대한 대안으로 CUT 등ì�˜ C UnitTestFramework ì�˜ 경우 외부ì—�서 Perl 등으로 작성한 스í�¬ë¦½íŠ¸ì–¸ì–´ë¡œ 테스트실행과 ê´€ë ¨í•œ Runner 를 ì½”ë“œì œë„ˆë ˆì�´íŒ…하는 방법ì�„ ì“°ê³ ìžˆë‹¤.
C++ ì�˜ 경우는 언어차ì›�ì—�서ì�˜ 리플랙션ì�„ ì§€ì›�하지 않기 때문ì—� 테스트를 추가하는 부분ì�´ ìž�바나 파ì�´ì�¬ 등ì—� 비해 ìƒ�당히 귀찮다. ê·¸ì—� 대한 대안으로 CUT 등ì�˜ C UnitTestFramework ì�˜ 경우 외부ì—�서 Perl 등으로 작성한 스í�¬ë¦½íŠ¸ì–¸ì–´ë¡œ 테스트실행과 ê´€ë ¨í•œ Runner 를 ì½”ë“œì œë„ˆë ˆì�´íŒ…하는 방법ì�„ ì“°ê³ ìžˆë‹¤.
CxxUnitì�€ CUTì�˜ 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 를 만들어 테스트하는 경우가 ë§Žì�€ ë§Œí�¼ 귀찮다. (테스트ì�˜ 중복으로 ì�´ì–´ì§€ë¯€ë¡œ) ì–´í�‘.









