는 :부스트 테스트로 내 프로그램의 출력을 확인할 수 있습니까? 에서와 마찬가지로
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
는 :부스트 테스트로 내 프로그램의 출력을 확인할 수 있습니까? 에서와 마찬가지로
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
예, 출력을 비교하는 특별한 방법을 제공하는 boost::test_tools::output_test_stream
에 std::cout
을 리디렉션하여 그것을 할 수 있습니다. std::cout
이 항상 올바르게 복원되도록하려면 다음 예제와 같이 사용자 정의 구조체를 사용할 수 있습니다.
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>
#include <iostream>
BOOST_AUTO_TEST_SUITE(TestSuite1)
struct cout_redirect {
cout_redirect(std::streambuf * new_buffer)
: old(std::cout.rdbuf(new_buffer))
{ }
~cout_redirect() {
std::cout.rdbuf(old);
}
private:
std::streambuf * old;
};
BOOST_AUTO_TEST_CASE(test1)
{
boost::test_tools::output_test_stream output;
{
cout_redirect guard(output.rdbuf());
std::cout << "Test" << std::endl;
}
BOOST_CHECK(output.is_equal("Test\n"));
}
BOOST_AUTO_TEST_SUITE_END()
나는 @ Björn Pollex의 대답을 몇일 동안 따라 갔다. 그러나 언젠가는 그렇게 할 필요가 없다는 것을 발견했습니다. boost::test_tools::output_test_stream
만 사용하십시오.
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>
BOOST_AUTO_TEST_SUITE(TestSuite1)
BOOST_AUTO_TEST_CASE(test1)
{
boost::test_tools::output_test_stream output;
output << "Test";
BOOST_CHECK(output.is_equal("Test"));
}
BOOST_AUTO_TEST_SUITE_END()
자세한 내용은 the official documentation을 참조하십시오.
Beautiful, Space_C0wb0y. 그럼 내가 무슨 일이 일어나는지 보자. cout_redirect 생성자에서 출력 테스트 스트림 버퍼를 증가시키기 위해 cout 스트림 버퍼를 설정합니다. 그리고 오래된 cout 스트림 버퍼를 저장합니다. cout에서 거기에서 쓰여지고 cout_redirect가 소멸 될 때까지 실제로는 부스트 스트림 버퍼에 기록됩니다. cout_redirect가 소멸되면, 우리는 cout 스트림 버퍼를 이전 값으로 리셋하고 우리가 원하는 모든 프로그램 출력을 가진 부스트 스트림 버퍼를 갖게됩니다. – rturrado
@rturrado : 정확합니다. –
우리가 할 수있는 일은 부스트 스트림 버퍼를 cout 스트림 버퍼로 설정하는 것입니다. 이 경우, 우리는 여전히 출력을 얻을 것이고, 우리는 그것을 부스트 스트림을 사용하여 체크 할 수있을 것이다. – rturrado