代码之家  ›  专栏  ›  技术社区  ›  Hemant

在文件中使用助推。测试?

  •  3
  • Hemant  · 技术社区  · 16 年前

    我的问题是,我们应该在全球范围内这样做吗?这似乎对我不起作用。

    这就是我试过的-

    struct MyConfig
    {
     MyConfig()
      : testReport("fileName.log")
      {
        if(!testReport.fail())
         original = std::cerr.rdbuf(testReport.rdbuf());
      }
      ~MyConfig()
        {        
            cerr.rdbuf(original);        
            testReport.close();
        }
        ofstream testReport;
        streambuf* original;
    
     };
    
     BOOST_GLOBAL_FIXTURE(MyConfig);
    

    运行测试后,只在控制台上报告输出,尽管使用给定名称创建了一个0kb文件。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Steve Townsend    16 年前

    你可以试试这个替代品,改编自 here 并被指控在Boost 1.34.1上工作。这似乎更符合Boost的意图—请参阅结果流重写器的用法。

    //
    // run_tests.cc
    //
    
    #define BOOST_AUTO_TEST_MAIN
    
    #include <iostream>
    #include <fstream>
    #include <cassert>
    #include <boost/test/auto_unit_test.hpp>
    #include <boost/test/results_reporter.hpp>
    
    std::ofstream ReportRedirector::out;
    
    struct ReportRedirector
    {
        ReportRedirector()
        {
            out.open("fileName.log");
            assert( out.is_open() );
            boost::unit_test::results_reporter::set_stream(out);
        }
    private:
        static std::ofstream out;
    };
    
    BOOST_GLOBAL_FIXTURE(ReportRedirector)
    
        2
  •  5
  •   Community Mohan Dere    9 年前

    Boost Documentation )

    #include <boost/test/unit_test.hpp>
    #include <string>
    #include <fstream>
    
    struct LogToFile
    {
        LogToFile()
        {
            std::string logFileName(boost::unit_test::framework::master_test_suite().p_name);
            logFileName.append(".xml");
            logFile.open(logFileName.c_str());
            boost::unit_test::unit_test_log.set_stream(logFile);
        }
        ~LogToFile()
        {
            boost::unit_test::unit_test_log.test_finish();
            logFile.close();
            boost::unit_test::unit_test_log.set_stream(std::cout);
        }
        std::ofstream logFile;
    };
    
    BOOST_GLOBAL_FIXTURE(LogToFile);
    

    在这个例子中 logFile 不是由提供的答案中的静态成员 Steve Townsend 日志文件

    但是,boost1.44.0中似乎有一个bug,如果出现这种情况,它也会导致生成不正确的XML输出 日志文件 不是fixture结构的静态成员(可能与我之前提到的bug相同)。 把这条线修好 logFile << "</TestLog>" << std::flush; 在关闭析构函数中的filestream以生成有效的XML之前需要。
    感谢@Wracky(下面的评论),我替换了这行 日志文件<<“</TestLog>”<<std::flush; 具有 boost::unit_test::unit_test_log.test_finish(); 这是一个比手动编写标签更干净的解决方案。

    注: 使用以下参数运行测试: --output_format=XML --log_level=all --report_level=no xUnit plugin continuous integration server Jenkins .

        3
  •  5
  •   Wracky    12 年前

    完整性:

    如果不想的话,你不必自己重定向输入。 也可以通过命令行参数指定日志文件:

    C:\MyTest.exe --log_sink=fileName.log
    

    我花了一段时间才找到。希望这有帮助!

    推荐文章