с усилением 1.44.0 (и, возможно, более поздних версий), Вам необходимо следующий код, чтобы создать глобальный прибор, который перенаправляет вывод тестовой программы в файл с именем после того, как мастер TestSuite, в которую включен тест (см 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, потому что декларирование logFile
в качестве статического члена в результате неправильно сгенерированного XML и доступ к арматуре структуры является не поточно- таким образом ,
Однако в Boost 1.44.0 имеется ошибка, которая также приводит к получению некорректного вывода XML, если
logFile
не является статическим членом структуры прибора (вероятно, такая же ошибка, о которой я упоминал ранее). Чтобы исправить это, необходимо, чтобы строка
logFile << "</TestLog>" << std::flush;
была необходима, прежде чем закрывать поток filestream в деструкторе для генерации действительного XML.
Благодаря @Wracky (комментарий ниже) я заменил строку logFile << "</TestLog>" << std::flush;
на boost::unit_test::unit_test_log.test_finish();
, что намного более чистое решение, чем запись тега вручную.
ПРИМЕЧАНИЕ: испытания проводятся со следующими параметрами: --output_format=XML --log_level=all --report_level=no
. Это позволяет использовать полученные XML-файлы с xUnit plugin для continuous integration server Jenkins.
Почему 'out' должен быть объявлен как' static'? – Hemant
Я не вижу причин, по которым нестатические могут сбой здесь, но это версия, которая должна была быть протестирована, по информации в ссылке. –