2014-02-11 3 views
2

BOOST.Test 프레임 워크와 관련된 질문이 있고 내 문제를 설명하기 위해 다음 예제를 사용하십시오. 모든 테스트 클래스를 통합하는 TestClass 라이브러리를 빌드하고 라이브러리는 정적이거나 동적 일 수 있습니다. 다음과 같이 라이브러리에 하나 개의 일반적인 기능은 다음의 TestClass 라이브러리 모두 들어정적 boost.test 라이브러리 및 동적 boost.test 라이브러리

test_suite* init_unit_test_suite(int argc, char* argv[]) 
{ 
    framework::master_test_suite().add(BOOST_TEST_CASE(&HelloWorld)); 

    return 0; 
} 

:

__declspec(dllexport) HelloWorld() 
{ 

     int i= 2; 
     int j= 1; 
      BOOST_CHECK(i == j); 
     BOOST_CHECK_EQUAL(i,j); 
} 

을 그리고,이 라이브러리를 호출하는 실행 프로그램 (예를 들어 MAIN.CPP)을 설정 그리고 실행 프로그램은 BOOST.Test 라이브러리가 필요합니다. 내가 만든이 BOOST.Test 라이브러리는 정적이다. 그런 다음 찾았습니다 :

  • TestClass 라이브러리가 정적이면 모든 것이 잘 진행됩니다.

    알 수없는 위치 (0) : 표준 : : runtime_error : "하여 HelloWorld"에서 치명적인 오류 수 없습니다 우리 전자 테스트하기의 TestClass 라이브러리는 동적 인 경우

  • 그러나, 나는 다음과 같은 오류가받은 프레임 워크가 초기화되기 전에 도구 아이디어가 있습니까? 감사합니다

+0

* 당신은 모두 별도의 DLL에있는 당신을 testcases를두고 왜 *을? 이 목적은 어떤 목적을합니까? –

+0

@MartinBa 의견 주셔서 감사합니다. 테스트 케이스가 분리 된 DLL에 들어있는 이유는 분리 된 DLL이 비 테스트 목적으로 사용될 수있는 일부 기능을 포함 할 수 있기 때문입니다. – feelfree

+0

테스트 코드가 아닌 테스트 (즉, 유틸리티 또는 "프로덕션"코드)를 혼합하는 것은 일반적으로 좋지 않습니다. 두 사람을 분리 시키면 인생이 훨씬 쉬워집니다. 이것은 단순히 좋은 [패키지 디자인 원칙] (http://en.wikipedia.org/wiki/Package_Principles)을 따르는 것입니다. 여기서 C++로 라이브러리를 "패키지"라고 부릅니다. – legalize

답변

2

있는지 확인이 BOOST_TEST_DYN_LINK 정의 :

If you opt to link a test module with the prebuilt dynamic library, this usage is called the dynamic library variant of the UTF. This variant requires you to define the flag BOOST_TEST_DYN_LINK either in a makefile or before the header boost/test/unit_test.hpp inclusion.
The dynamic library variant of the UTF

#define BOOST_TEST_DYN_LINK 
#include <boost/test/unit_test.hpp>