...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::unit_test::unit_test_log_formatter — Abstract Unit Test Framework log formatter interface.
// In header: <boost/test/unit_test_log_formatter.hpp> class unit_test_log_formatter { public: // Types of log entries (messages written into a log) enum log_entry_types { BOOST_UTL_ET_INFO, BOOST_UTL_ET_MESSAGE, BOOST_UTL_ET_WARNING, BOOST_UTL_ET_ERROR, BOOST_UTL_ET_FATAL_ERROR }; // construct/copy/destruct unit_test_log_formatter(); ~unit_test_log_formatter(); // public member functions virtual void log_start(std::ostream &, counter_t) = 0; virtual void log_finish(std::ostream &) = 0; virtual void log_build_info(std::ostream &, bool = true) = 0; virtual void test_unit_start(std::ostream &, test_unit const &) = 0; virtual void test_unit_finish(std::ostream &, test_unit const &, unsigned long) = 0; virtual void test_unit_skipped(std::ostream &, test_unit const &, const_string); virtual void test_unit_skipped(std::ostream &, test_unit const &); virtual void test_unit_aborted(std::ostream &, test_unit const &); virtual void test_unit_timed_out(std::ostream &, test_unit const &); virtual void log_exception_start(std::ostream &, log_checkpoint_data const &, execution_exception const &) = 0; virtual void log_exception_finish(std::ostream &) = 0; virtual void log_entry_start(std::ostream &, log_entry_data const &, log_entry_types) = 0; virtual void log_entry_value(std::ostream &, const_string) = 0; virtual void log_entry_value(std::ostream &, lazy_ostream const &); virtual void log_entry_finish(std::ostream &) = 0; virtual void entry_context_start(std::ostream &, log_level) = 0; virtual void log_entry_context(std::ostream &, log_level, const_string) = 0; virtual void entry_context_finish(std::ostream &, log_level) = 0; virtual void set_log_level(log_level); virtual log_level get_log_level() const; virtual std::string get_default_stream_description() const; };
During the test module execution Unit Test Framework can report messages about success or failure of assertions, which test suites are being run and more (specifically which messages are reported depends on log level threshold selected by the user).
All these messages constitute Unit Test Framework log. There are many ways (formats) to present these messages to the user.
Boost.Test comes with three formats:
Compiler-like log format: intended for human consumption/diagnostic
XML based log format: intended for processing by automated regression test systems.
JUNIT based log format: intended for processing by automated regression test systems.
If you want to produce some other format you need to implement class with specific interface and use method unit_test_log_t::set_formatter
during a test module initialization to set an active formatter. The class unit_test_log_formatter defines this interface.
This interface requires you to format all possible messages being produced in the log. These includes error messages about failed assertions, messages about caught exceptions and information messages about test units being started/ended. All the methods in this interface takes a reference to standard stream as a first argument. This is where final messages needs to be directed to. Also you are given all the information necessary to produce a message.
Since Boost 1.62:
Each formatter may indicate the default output stream. This is convenient for instance for streams intended for automated processing that indicate a file. See get_default_stream_description
for more details.
Each formatter may manage its own log level through the getter/setter get_log_level
and set_log_level
.
See Also:
boost::unit_test::test_observer for an indication of the calls of the test observer interface
unit_test_log_formatter
public member functionsvirtual void log_start(std::ostream & os, counter_t test_cases_amount) = 0;Invoked at the beginning of test module execution.
See Also:
log_finish
Parameters: |
|
virtual void log_finish(std::ostream & os) = 0;Invoked at the end of test module execution.
See Also:
log_start
Parameters: |
|
virtual void log_build_info(std::ostream & os, bool log_build_info = true) = 0;Invoked when Unit Test Framework build information is requested.
Parameters: |
|
virtual void test_unit_start(std::ostream & os, test_unit const & tu) = 0;Invoked when test unit starts (either test suite or test case)
See Also:
test_unit_finish
Parameters: |
|
virtual void test_unit_finish(std::ostream & os, test_unit const & tu, unsigned long elapsed) = 0;Invoked when test unit finishes.
See Also:
test_unit_start
Parameters: |
|
virtual void test_unit_skipped(std::ostream & os, test_unit const & tu, const_string);Invoked if test unit skipped for any reason.
Parameters: |
|
virtual void test_unit_skipped(std::ostream &, test_unit const &);Deprecated version of this interface.
<xrefsect><xreftitle>Deprecated</xreftitle><xrefdescription></xrefdescription></xrefsect>
virtual void test_unit_aborted(std::ostream &, test_unit const &);Invoked when a test unit is aborted.
virtual void test_unit_timed_out(std::ostream &, test_unit const &);Invoked when a test unit times-out.
virtual void log_exception_start(std::ostream & os, log_checkpoint_data const & lcd, execution_exception const & ex) = 0;Invoked when Unit Test Framework detects uncaught exception.
The framwork calls this function when an uncaught exception it detected. This call is followed by context information:
one call to entry_context_start
,
as many calls to log_entry_context
as there are context entries
one call to entry_context_finish
The logging of the exception information is finilized by a call to log_exception_finish
.
See Also:
log_exception_finish
Parameters: |
|
virtual void log_exception_finish(std::ostream & os) = 0;Invoked when Unit Test Framework detects uncaught exception.
Call to this function finishes uncaught exception report.
See Also:
log_exception_start
Parameters: |
|
virtual void log_entry_start(std::ostream & os, log_entry_data const & led, log_entry_types let) = 0;Invoked by Unit Test Framework to start new log entry.
Call to this function starts new log entry. It is followed by series of log_entry_value calls and finally call to log_entry_finish. A log entry may consist of one or more values being reported. Some of these values will be plain strings, while others can be complicated expressions in a form of "lazy" expression template lazy_ostream.
See Also:
log_entry_value, log_entry_finish
Note | |
---|---|
call to this function may happen before any call to test_unit_start or all calls to test_unit_finish as the framework might log errors raised during global initialization/shutdown. |
Parameters: |
|
virtual void log_entry_value(std::ostream & os, const_string value) = 0;Invoked by Unit Test Framework to report a log entry content.
This is one of two overloaded methods to report log entry content. This one is used to report plain string value.
See Also:
log_entry_start, log_entry_finish
Parameters: |
|
virtual void log_entry_value(std::ostream & os, lazy_ostream const & value);Invoked by Unit Test Framework to report a log entry content.
This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts the lazy expression into a string.
See Also:
log_entry_start, log_entry_finish
Parameters: |
|
virtual void log_entry_finish(std::ostream & os) = 0;Invoked by Unit Test Framework to finish a log entry report.
See Also:
log_entry_start, log_entry_start
Parameters: |
|
virtual void entry_context_start(std::ostream & os, log_level l) = 0;Invoked by Unit Test Framework to start log entry context report.
Unit Test Framework logs for failed assertions and uncaught exceptions context if one was defined by a test module. Context consists of multiple "scopes" identified by description messages assigned by the test module using BOOST_TEST_INFO/BOOST_TEST_CONTEXT statements.
See Also:
log_entry_context, entry_context_finish
Parameters: |
|
virtual void log_entry_context(std::ostream & os, log_level l, const_string value) = 0;Invoked by Unit Test Framework to report log entry context "scope" description.
Each "scope" description is reported by separate call to log_entry_context.
See Also:
log_entry_start, entry_context_finish
Parameters: |
|
virtual void entry_context_finish(std::ostream & os, log_level l) = 0;Invoked by Unit Test Framework to finish log entry context report.
See Also:
log_entry_start, entry_context_context
Parameters: |
|
virtual void set_log_level(log_level new_log_level);Sets the log level of the logger/formatter.
Some loggers need to manage the log level by their own. This member function let the implementation decide of that.
Since Boost 1.62 .
virtual log_level get_log_level() const;Returns the log level of the logger/formatter.
Since Boost 1.62 .
virtual std::string get_default_stream_description() const;Returns a default stream for this logger.
The returned string describes the stream as if it was passed from the command line "--log_sink"
parameter. With that regards, stdout and stderr have special meaning indicating the standard output or error stream respectively.
Since Boost 1.62 .