CppUnit 과 CruiseControl.NET 과의 결합 DarkKaiser, 2008년 1월 10일2023년 9월 6일 int _tmain(int argc, _TCHAR* argv[]) { CPPUNIT_NS::TestResult controller ; CPPUNIT_NS::TestResultCollector result ; controller.addListener (&result); CPPUNIT_NS::TestRunner runner ; runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest()); runner.run(controller); std::ofstream file("Results.xml"); CPPUNIT_NS::XmlOutputter xml(&result , file); xml.setStyleSheet("report.xsl"); xml.write(); file.close(); return result.wasSuccessful() ? 0: 1; } 기존 소스와 다른점은 아래쪽에 추가된 부분이라고 할 수 있겠습니다.Results.xml 을 지정해서 그 파일을 XmlOutPutter 의 결과로 지정해주는 부분입니다.이렇게 되면 테스트의 상세 결과가 Results.xml 로 저장이 됩니다. stylesheet 를 지정해주는 부분은 옵션입니다. 만약 스타일 쉬트를 지정하게 되면 output 폴더에 꼭 reports.xsl 을 가지고 다녀야 합니다. 자 이제 Test 프로젝트를 준비가 됐으니 다음은 ccnet.config 를 손볼 차례입니다. 이 파일은 보통 %CRUISECONTROL.NET%\server 에 있습니다. 기존의 <devenv> 태그 다음에 다음과 같은 내용을 추가합니다. <exec> <executable>cppTest.exe</executable> <baseDirectory>D:\User\Crazia\Work\cppTest\debug</baseDirectory> <buildTimeoutSeconds>10</buildTimeoutSeconds> </exec> 위 내용은 프로젝트를 빌드후에 실행해줘야 하는 것을 지정해준 것입니다. 위의 프로그램 예제에서 보여줬듯이 이 방법을 써서 테스트 프로젝트를 실행하면 Results.xml 에 테스트 결과가 저장됩니다. 이 결과를 기존의 빌드로그 가 표시되는 xml 파일에 병합해야 하는 문제가 남았습니다. <task> 태그가 닫히고 난 뒤 같은 레벨에 존재하는 <publishers> 태그가 그 부분을 처리해 줍니다. 정확히는 <merge> 태그 안에 병합할파일을 써주시면 됩니다. 다음에 그 예제를 적어 뒀습니다. <task> … <devenv> .. </devenv> <exec> <executable>cppTest.exe</executable> <baseDirectory>D:\User\Crazia\Work\cppTest\debug</baseDirectory> <buildTimeoutSeconds>10</buildTimeoutSeconds> </exec> </tasks> <publishers> <merge> <files> <file>D:\User\Crazia\Work\cppTest\debug\Results.xml</file> </files> </merge> <xmllogger /> </publishers> 마지막으로 실제 build report 부분에서 테스트 결과를 볼 수 있게 하는 방법에 대해서 알아보도록 하지요. 이 부분은 이부분 을 참조했습니다. 이 CruiseControl.NET web dashboard 는 빌드 로그를 xsl 파일을 통해서 값을 파싱해서 그 결과값을 화면에 뿌려줍니다. 그래서 기존의 xsl 파일로는 cppUnit 이 만들어 내는 결과를 인식 못합니다. (위에 써둔 Results.xml 을 빌드로그에 병합한 형태를 인식못함) 따라서 unittest.xsl 를 다운 받아서 %CRUISECONTROL.NET%\webdashboard\xsl에 넣어줍니다. 프로젝트 관리 CICruiseControl.NETCppUnit