2016-10-28 8 views
4

다른 .cpp 파일이 출력하려는 ​​방식으로 출력하고 있는지 확인하는 자체 test.cpp를 작성하려면 명시 적으로 인쇄하지 않고이를 수행 할 수 있습니까?C++ 단위 테스트 확인 출력이 정확합니다.

, "cout을"에드해야하는데 뭔가 output_of_file_being_tested

assert(output_of_file_being_tested, "this is the correct output"); 

같은 것도있다.

+1

당신은 이것과 비슷한 것을 할 수있다 : http://stackoverflow.com/questions/10150468/how-to-redirect-cin-and-cout-to-files –

+2

'std와 같은 것에 쓰는 것을 피하면 코드가 더 테스트 가능하다. :: cout'을 직접 작성하고'std :: ostream &'레퍼런스에 쓴다. 그런 다음 테스트 프레임 워크는 응용 프로그램이'std :: cout'에서 전달하는 동안'std :: ostringstream' 객체를 전달할 수 있습니다. – Galik

답변

6

해결 방법은 출력 스트림을 하드 코딩하지 않는 것입니다. 어떻게 든 코드에 std::ostream에 대한 참조를 전달하고 std::stringstream을 사용하여 테스트 환경에서 출력을 수집하십시오. 생산/릴리스 코드에 따라서

void toBeTested(std::ostream& output) { 
     output << "this is the correct output"; 
} 

당신이 함수에 std::cout를 통과 할 수 있습니다 :

void productionCode() { 
     toBeTested(std::cout); 
} 

동안

예를 들어

, 이것은 당신의 "다른 cpp를"파일의 내용입니다 테스트 환경에서 출력을 스팅 스트림으로 수집하여 정확성을 검사 할 수 있습니다.

// test.cpp 
#include <sstream> 
#include <cassert> 

void test() { 
     std::stringstream ss; 
     toBeTested(ss); 
     assert(ss.str() == "this is the correct output"); 
}