2014-02-16 4 views
1

유닛 테스트를 위해 Boost.Test를 사용하고 있습니다. 테스트 코드가 배송되지 않고 프로덕션 코드가 부 풀리지 않도록 별도의 dll에 모든 테스트 코드를 갖고 싶습니다. 이를 위해BOOST.TEST dll과 exe에서 주자에서 BOOST 테스트 케이스가 발생하는 문제

은 내가

bool init_unit_test_suite() 
{ 
    test_suite * ts = GetTestSuite(); 
    framework::master_test_suite().add(ts); 
    return true; 
} 
나의 init_unit_test_suite 내에서이 메소드를 호출 할 수 있어요, dll을에서 수동 테스트 케이스를 가진 것으로 간주하고 내 테스트 러너에서 DLL 수출을하는 방법

// Test cases DLL code 
// exported method 
__declspec(dllexport) test_suite *GetTestSuite() 
{ 
    test_suite* ts1 = BOOST_TEST_SUITE("manual_test_suite1"); 
    ts1->add(BOOST_TEST_CASE(&manual_test_case1)); 
    ts1->add(BOOST_TEST_CASE(&manual_test_case2)); 
    return ts1; 
} 

그러나 테스트 사례가 선택되지 않았습니다. 그러나 테스트 주자 내부에있는 테스트 사례가 로컬에 집어 들고 있습니다.

나는 BOOST 정적 lib 디렉토리로 연결하고 내 테스트 러너에

// Test runner app code 
#define BOOST_TEST_NO_LIB 
#define BOOST_TEST_NO_MAIN 

을 정의하여 내 자신의 주를있다.

이 조합에 어떤 문제가 있습니까? 개별 dll에서 테스트 케이스를 분리하고 외부 테스트 러너를 확보하려면 어떻게해야합니까?

편집 : 제가 테스트 케이스를 호출하는 데 사용하는 명령 줄은 다음과 같습니다

char *myargv[] = {"", "--log_level=test_suite", "report_level=detailed", "output_format=xml", "--run_test=manual_test_suite1"}; 
argc = _countof(myargv); 
unit_test_main((init_unit_test_func) &init_unit_test_suite, argc, myargv); 

내가 위의 명령 줄 점점 오전 오류 :

Test setup error: no test cases matching filter 
+0

문제점을 발견했습니다. 내 테스트 러너는 Boost.Test에 동적으로 연결되었습니다. 하지만 내 테스트 DLL은 부스트에 정적으로 연결되었습니다. 동적 링크로 변경했는데 이제는 모든 것이 잘 작동합니다. –

답변

0

내가 문제를 발견했다. 내 테스트 러너는 Boost.Test에 동적으로 연결되었습니다. 하지만 내 테스트 DLL은 부스트에 정적으로 연결되었습니다. 동적 링크로 변경했는데 이제는 모든 것이 잘 작동합니다.