2010-01-20 12 views
1

나는 다음과 같이 내 테스트 스위트 의 방법을 쓰고 싶습니다C++ 부스트 단위 테스트 오류 메시지

void checkParams(arg1, arg2, arg3) 
{ 
BOOST_REQUIRE(arg1==1); 
BOOST_REQUIRE(arg2==2); 
BOOST_REQUIRE(arg3==3); 

} 

는 그러나, 나는 어설 션이 실패 할 경우 stderr로 뭔가를 쓰고 싶어요. checkParams 인수에 실패 3

쓰기 지금 생성하는 메시지는 중요한 검사가 5 ==를 실패한 그냥 ARG1 = 5, ARG2 = 4에서 arg3 = : 첫 번째 어설 션이 실패 할 경우 예를 들어, , 내가 쓰고 싶은 1.

더 일반적으로 실패시 stacktrace를 생성하여이 실패로 이어지는 호출 을 볼 수 있습니다. 이 메서드는 모든 내 BOOST_AUTO_TEST_CASE 메서드에 의해 호출되지만 BOOST_AUTO_TEST_CASE 자체는 아닙니다.

어떻게하면됩니까?

또 다른 질문 : 나는 런타임 매개 변수를 제공하여 로깅 수준을 수정할 수 있습니다 알고, 내가 코드 내에서 LOG_LEVEL을 설정하는 방법

./test --log_level=all 

?

답변

2

당신은 BOOST_REQUIRE_MESSAGE을 원합니다.

당신은 아마 하나의 검사로 사람들을 병합 할 : 나는 BOOST_REQUIRE 전에 BOOST_CHECK 또는 BOOST_CHECK_EQUAL을 사용

BOOST_REQUIRE_MESSAGE((arg1 == 1) && (arg2 == 2) && (arg3 = 3), 
    "failed with arg1=" << arg1 << " arg2=" << arg2 << " arg3= " << arg3); 
+0

부스트 1.40은 두 번째 매개 변수 (리터럴 문자열 만)로 BOOST_MESSAGE 을 배치 할 수 없습니다. – user231536

+0

필요 없는데 BOOST_MESSAGE에 넣으세요. 올바른 버전으로 답변을 업데이트했습니다. –

2

. BOOST_CHECK은 오류를보고하고 계속하기 때문에 테스트가 실패하지만 모든 잘못된 값을 보게됩니다.

나중에 테스트를 강제 종료하려면 나중에 BOOST_REQUIRE를 사용하십시오.

void checkParams(arg1, arg2, arg3) 
{ 
    BOOST_CHECK_EQUAL(1, arg1); 
    BOOST_CHECK_EQUAL(2, arg2); 
    BOOST_CHECK_EQUAL(3, arg3); 

    BOOST_REQUIRE(arg1==1 && arg2==2 && arg3==3); 
}