2014-07-07 6 views
1

정수 오류 코드를 반환하는 함수를 테스트하고 있습니다. 나는 BOOST_CHECK_EQUAL을 사용하여 함수를 오류 코드로 비교합니다. 이 유사 :BOOST_CHECK_EQUAL 동안 cerr 출력 숨기기

BOOST_CHECK_EQUAL(foo(a), 12) // where 12 is an error code 

기능 foo 오류 코드가 반환되기 전에 트리거됩니다 그것의 cerr 문이있다. 오류 메시지를 숨길 방법이 있습니까?

Running 7 test cases... 

*** No Errors detected 

그냥 하나 개의 테스트에 2>/dev/null에 해당하는이 테스트를 실행하는 방법이 있나요 :

Running 7 test cases... 
Error in foo() 

*** No errors detected 

하지만 내가를 원하는 : 현재 내 출력은 다음과 같은 것을 읽어? 미리 감사드립니다. 부작용이 검사 전에 트리거되도록

답변

1

하나의 옵션은 변수에 반환 값을 저장하는 것이다

auto result = foo(a); 
BOOST_CHECK_EQUAL(result, 12) 

dev/nullstd::cerr의 버퍼를 변경하고, 출력을 숨기는 또 다른 : 나중에

namespace ns { 
    struct defer_output_wrapper 
    { 
     defer_output_wrapper(std::ostream& os) : os(os), sbuf(os.rdbuf()) 
     { 
      os.rdbuf(null.open("dev/null", std::ios_base::out)); 
     } 

     ~defer_output_wrapper() { os.rdbuf(sbuf); } 
    private: 
     std::ostream& os; 
     std::streambuf* sbuf; 
     std::filebuf null; 
    }; 
} 
...

{ 
    ns::defer_output_wrapper _(std::cerr); // Output on std::cerr writes to dev/null 
    BOOST_CHECK_EQUAL(foo(a), 12) 
} // buffer changes back 
+0

오류가 전혀 나타나지 않으므로 첫 번째 제안이 제대로 작동하지 않습니다. (이것은 많은 테스트 케이스가있는 매우 큰 프로그램으로, 성공했을 때는 출력이 필요 없다.) 로거를 사용할 때 두 번째 솔루션을 사용할 수 있으며 체크 전에 출력 우선 순위를 변경 한 다음 후에 되돌릴 수 있습니다. 부스트 테스트의 기본 방법이 있는지 궁금합니다. 테스팅하는 동안 결과를 숨기고 싶다는 것이 일반적인 일인 것처럼 보입니다. Google 검색 결과를 찾을 수 없어서는 안됩니다. –