2017-02-01 9 views
0

부스트 유닛 테스트가 많이 있습니다. 신호 처리기를 설치해야하는 곳을 찾을 수 없습니다. 단위 테스트 디렉토리에있는 파일에는 main() 기능이 없습니다. 일부 매크로에서는 main()이 숨겨져있는 것 같습니다. unit_test.hpp에서부스트 유닛 테스트를위한 신호 처리기를 설치할 수 있습니까?

나는 참조 :

namespace boost { namespace unit_test { 

int BOOST_TEST_DECL unit_test_main(init_unit_test_func init_func, int argc, char* argv[]); 

} 

하지만 내가 어떻게 거기에 신호 핸들러를 설정할 수 있도록, 내 자신의 main() 기능을 구현할 수있다?

+1

당신은 주요 기능 생성을 해제하고 자신의 경로를 제공 할 수는 . 예를 들어 [여기] (http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/boost_test/utf_reference/link_references/link_boost_test_no_main.html) – mkaes

+0

답변 해 주셔서 감사합니다! – JimmyY

답변

0

지침 here에 따라, 당신은의 신호 처리기를 설정하는 자신의 main 기능을 제공 할 수 있습니다 다음이 채택 몇 가지 코드입니다.

#define BOOST_TEST_MODULE custom_main 
#define BOOST_TEST_NO_MAIN 
#define BOOST_TEST_ALTERNATIVE_INIT_API 
#include <boost/test/included/unit_test.hpp> 
#include <iostream> 

#include <unistd.h> 
#include <signal.h> 

void signalHandler(int sig) 
{ 
    std::cerr << "Inside signal handler" << std::endl; 
} 

namespace utf = boost::unit_test; 

BOOST_AUTO_TEST_CASE(test1) 
{ 
    BOOST_TEST(false); 
} 

int main(int argc, char* argv[], char* envp[]) 
{ 
    signal(SIGINT, signalHandler); 
    signal(SIGTERM, signalHandler); 
    return utf::unit_test_main(init_unit_test, argc, argv); 
} 
+0

대단히 감사합니다! – JimmyY

+0

부스트 유닛 테스트가 실행되는 모든 테스트의 이름을 출력하도록하는 법을 아십니까? Google unittest에는 -v 옵션이 있습니다. 그러나 부스트 unittests 위해 작동하지 않습니다. 고마워. – JimmyY

+0

명령 줄 스위치'--log-level = all'을 시도 할 수 있습니다. – Smeeheey