주말 코딩: Google test 용 GUI runner
팀에서는 C++ 테스트 프레임웍으로 구글 테스트(gtest)를 사용한다. 여기에 불만스러운게 좀 있다면, 다름 아니라 GUI test-runner가 없다는 것. x-unit 류의 GUI Test-runner에서 흔히 볼 수 있는 녹색 테스트 프로그레스 바가 보고싶다는 점에서 python 프로그램을 하나 작성하게 되었다.
작업의 단초는,
- pyunit의 GUI runner. 이걸로 GUI를 돌려보자
- gtest 는
–gtest_list_tests
로 해당 실행 파일의 테스트 케이스를 볼 수 있다 - 더불어,
some_gtest_exe.exe –gtest_output=xml:some_file_name
하면 XML 형태의 결과를 쓸 수 있다
정도?
일단 간단한 python wrapper로,
- 등록된, 혹은 특정 이름 패턴(eg.
TEST_???.exe
)의 gtest가 담긴 실행 파일을 지켜보다가, - 마지막 테스트 실행 시간 이후에 변경된 파일이 있으면,
- 이걸 실행하고, 결과를 리포팅
하는 기능을 짜는게 1차 목표. 다만, C++ 코드를 직접 손대는 일은 가능하면 배제하고,
InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
만으로 main()
함수를 만든 테스트 들을 쉽게 처리하는데 중점을 둔다. C++ 코드에 손을 대면, EventListener 쪽을 확장해서 어느 정도 쉽게할 수 있겠지만, 그럼 컴파일 시간에 의존성이 생기기에, 기존 코드들을 고치는데는 별로 달가운 뭔가가 아니다…
그래서 대략 PyUnit 의 GUI 툴과, 몇 가지 파이썬 팩키지를 써서, 이런 녀석을 만들었다. 기본적으로 강제 실행이 가능하고, 수 초(기본은 10)마다 테스트 파일들의 시간을 보고 테스트를 실행한다. C++ 기반의 테스트에 영향을 주려면, 일종의 데이터가 아닌 이상은 link 시간에 뭔가 변화가 있어야할테니까. (링크 자체거나, 링커의 입력이거나…)
UI는 PyUnit의 GUI runner랑 똑같음… PyTk 를 거의 모르니 일단은 가져다 쓰기.
이후에는,
- 예전의 UnitTest++에 대응하는 VUTTP 처럼, 일부 테스트 케이스/테스트만 실행 할 수 있게 할 것
- VS integration
같은걸 해봐야 겠다. 근데 일단 ipkn한테 물어보고, 저걸 top-most window로 띄우는 거 먼저 해야 -_-;