2012-04-20 5 views
10

몇 가지 테스트 스위트에서 많은 부스트 ​​테스트 케이스를 주문했습니다. 일부 테스트 케이스에는 하나, 두 개 이상의 체크가 있습니다.첫 번째 실패한 테스트 케이스에서 Boost.Test를 중지하는 방법은 무엇입니까?

그러나 모든 테스트를 실행하면 실패 또는 통과 횟수에 관계없이 모든 테스트가 실행됩니다. 나는 BOOST_CHECK 대신 BOOST_REQUIRE을 사용하여 여러 검사를 통해 하나의 테스트 케이스 실행을 중단 할 수 있음을 알고 있습니다. 하지만 그건 내가 원하는 것이 아닙니다.

첫 번째 테스트 케이스가 실패한 후 Boost가 전체 실행을 중단하도록 어떻게 표시 할 수 있습니까? 런타임 솔루션 (예 : 런타임 매개 변수)에 대해 컴파일 된 솔루션 (예 : 글로벌 픽스처로 구현)을 선호합니다.

+1

BOOST_REQUIRE_THROW는 예외를 throw하여 전체 테스트 스위트의 실행을 중지해야합니다. 고마워요. @ rhalbersma. – TemplateRex

+0

. 나는 그것을 시도 할 것이다. 왜 그걸로 대답하지 그래? –

+1

부스트 테스터 매뉴얼을 더 자세히 읽은 후에 제안이 부정확했기 때문에. BOOST_REQUIRE_THROW는 예외가 던져 졌는지 확인하는 단위 테스트입니다. 그것은 스스로를 던지지 않습니다. – TemplateRex

답변

4

BOOST_REQUIRE는 테스트 스위트에서 현재 테스트 케이스를 중지하지만 다른 테스트 케이스로 이동합니다.

"컴파일 된 솔루션"을 요청했을 때 내가 원하는 것을 실제로 볼 수 없지만 작동해야하는 트릭입니다. 전체 테스트 스위트의 안정성을 확인하기 위해 부울을 사용합니다. 불안정한 경우 즉 BOOST_REQUIRE가 트리거 된 경우 모든 것을 중지합니다.

희망이 있으면 도움을 드리겠습니다.

//#include <...> 

//FIXTURES ZONE 
struct fixture 
{ 
    fixture():x(0.0),y(0.0){} 
    double x; 
    double y; 
}; 

//HELPERS ZONE 
static bool test_suite_stable = true; 

void in_strategy(bool & stable) 
{ 
    if(stable) 
     { 
      stable = false; 
     } 
    else 
     { 
      exit(); 
     } 
} 

void out_strategy(bool & stable) 
{ 
    if(!stable) 
     { 
      stable = true; 
     } 
} 

BOOST_AUTO_TEST_SUITE(my_test_suite) 

//TEST CASES ZONE 
BOOST_FIXTURE_TEST_CASE(my_test_case, fixture) 
{ 
    in_strategy(test_suite_stable); 
    //... 
    //BOOST_REQUIRE() -> triggered 
    out_strategy(test_suite_stable); 
} 

BOOST_FIXTURE_TEST_CASE(another_test_case, fixture) 
{ 
    in_strategy(test_suite_stable); //-> exit() since last triggered so stable = false 
    //... 
    //BOOST_REQUIRE() 
    out_strategy(test_suite_stable); 
} 

BOOST_TEST_SUITE_END() 

Benoit.

+0

이 해킹을 가져 주셔서 감사합니다 :) 그러나 각 테스트 케이스에서 in_/out_strategy를 호출하는 것은 DRY 원칙을 향한 것입니다. 전 세계적으로 (또는 테스트 스위트별로) 모든 테스트 케이스에 대해 'before'및 'after'픽스처를 정의 할 가능성이 있습니까? 또는 BOOST_AUTO_TEST_CASE 또는 그와 비슷한 것을 다시 정의해야합니다. –

+0

@Torbjoern - 조명기의 ctor/dtor에 in/out 전략 호출을 넣습니다. Fixture는 각각의 테스트 케이스별로 생성되고 파괴됩니다. 퀀 테이크 (Quanteek) - 당신의 대답에 그것을 포함시키고 싶습니까? –

1

어설트 트를 사용하지 않는 이유는 무엇입니까? 전체 프로그램을 즉시 중단 할뿐만 아니라 필요한 경우 스택을 볼 수도 있습니다.