C++ 我可以检查我的程序吗';带升压测试的输出?
例如:C++ 我可以检查我的程序吗';带升压测试的输出?,c++,unit-testing,boost,boost-test,C++,Unit Testing,Boost,Boost Test,例如: 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是的,您可以通过将std::cout重定向到a来执行此操作,a提供了比较输出的特殊方法。为了确保始终正确还原std::cout,您可以使
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是的,您可以通过将std::cout
重定向到a来执行此操作,a提供了比较输出的特殊方法。为了确保始终正确还原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()
#定义BOOST_TEST_MAIN
#包括
#包括
#包括
BOOST\u AUTO\u TEST\u套件(TestSuite1)
结构无法重定向{
cout_重定向(std::streambuf*新_缓冲区)
:旧(标准::列rdbuf(新缓冲区))
{ }
~cout_重定向(){
标准::cout.rdbuf(旧);
}
私人:
标准::streambuf*旧;
};
增压自动测试案例(测试1)
{
boost::test\u tools::output\u test\u流输出;
{
cout_重定向保护(output.rdbuf());
std::cout我已经关注@Björn Pollex的答案好几天了。但是有一天我发现没有必要这样做。只需使用boost::test\u tools::output\u test\u 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()
#定义BOOST_TEST_MAIN
#包括
#包括
BOOST\u AUTO\u TEST\u套件(TestSuite1)
增压自动测试案例(测试1)
{
boost::test\u tools::output\u test\u流输出;
输出漂亮,空格为C0wb0y。那么让我们看看我是否了解那里发生了什么。在cout_重定向构造函数中,我们设置cout stream buffer来提升输出测试流buffer。我们保存旧的cout stream buffer。从那里开始在cout中写入的任何内容,直到cout_重定向被破坏,实际上都会写入boost stream buffer。当cout_重定向时被破坏后,我们将cout stream buffer重置为其以前的值,我们有一个boost stream buffer,其中包含我们想要的所有程序输出。我想,我们也可以将boost stream buffer设置为cout stream buffer。在这种情况下,我们仍然可以在cout中获得输出,并且可以使用boost stream检查它。@RTURADO:我不知道现在,如果这可以按预期工作。一旦刷新std::cout
,缓冲区将为空,output\u test\u stream
以后将无法检查内容。这也可以为std::cerr
完成。在您的示例中,您只能测试运算符