Old*_*ier 5 time boost unit-testing units-of-measurement boost-unit-test-framework
在启用所有日志记录(例如test --log_level=all)的情况下执行时,使用Boost Unit Test Framework创建的单元测试将报告单个测试用例使用如下消息所花费的时间:
Leaving test case "testRecursiveSchedule"; testing time: 2196mks
Run Code Online (Sandbox Code Playgroud)
在那里展示的单位,mks,使我神秘.据我所知,Meters-Kilograms-Seconds是一个公制测量系统,但Boost显然只显示时间测量.不应该在这种情况下,单位是毫秒,如果毫秒或微秒(或者我们)如果微秒?是MKS通常理解为微秒的缩写?
请注意,根据Boost单元测试框架源代码,如果经过的时间恰好可被1000整除,则显示的单位将为ms,在这种情况下,在显示之前将除以1000.这与mks意味着微秒的观点是一致的.
但是呢?或者Boost在这里是特殊的?
这是我的猜测.
Boost.Test的作者Gennadiy Rozental是讲俄语的,俄语中的微秒是"микросекунда",缩写为"мкс",可以音译为"mks".有时我看到"mks"意外地出现在讲俄语的人的作品中.
用于测试时间的机制是
boost::timer tc_timer;
test_unit_id bkup = m_curr_test_case;
m_curr_test_case = tc.p_id;
unit_test_monitor_t::error_level run_result = unit_test_monitor.execute_and_translate( tc );
unsigned long elapsed = static_cast<unsigned long>( tc_timer.elapsed() * 1e6 );
Run Code Online (Sandbox Code Playgroud)
Boost Timer记录在此处并承诺以下内容:
double elapsed() const // return elapsed time in seconds
{ return double(std::clock() - _start_time) / CLOCKS_PER_SEC; }
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Boost Tests 将微秒传递给观察者的test_unit_finish实现:
BOOST_TEST_FOREACH( test_observer*, to, m_observers )
to->test_unit_finish( tc, elapsed );
Run Code Online (Sandbox Code Playgroud)
他们确实通常将其打印为:
if( elapsed % 1000 == 0 )
output << elapsed/1000 << "ms";
else
output << elapsed << "mks";
Run Code Online (Sandbox Code Playgroud)
或 XML 的原始微秒:
if( tu.p_type == tut_case )
ostr << "<TestingTime>" << elapsed << "</TestingTime>";
Run Code Online (Sandbox Code Playgroud)
有效精度取决于系统:
