Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以检查我的程序吗';带升压测试的输出?_C++_Unit Testing_Boost_Boost Test - Fatal编程技术网

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
完成。在您的示例中,您只能测试
运算符