reports.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Reported information</title>
  5. <link rel="stylesheet" href="../../boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../index.html" title="Boost.Test">
  8. <link rel="up" href="../testing_tools.html" title="Writing unit tests">
  9. <link rel="prev" href="boost_test_universal_macro.html" title="BOOST_TEST: universal and general purpose assertions">
  10. <link rel="next" href="extended_comparison.html" title="Extended comparisons support">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="boost_test_universal_macro.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../testing_tools.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extended_comparison.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h3 class="title">
  27. <a name="boost_test.testing_tools.reports"></a><a class="link" href="reports.html" title="Reported information">Reported information</a>
  28. </h3></div></div></div>
  29. <h4>
  30. <a name="boost_test.testing_tools.reports.h0"></a>
  31. <span class="phrase"><a name="boost_test.testing_tools.reports.failure_message_why"></a></span><a class="link" href="reports.html#boost_test.testing_tools.reports.failure_message_why">Failure message,
  32. why?</a>
  33. </h4>
  34. <p>
  35. When an assertion fails, a message is logged containing:
  36. </p>
  37. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  38. <li class="listitem">
  39. the body of the statement that failed
  40. </li>
  41. <li class="listitem">
  42. the name of the file and the line of the failed assertion
  43. </li>
  44. <li class="listitem">
  45. the name of the test case containing this assertion
  46. </li>
  47. </ul></div>
  48. <p>
  49. The purpose of all these information is to isolate as quickly as possible
  50. the test that failed from the others. The <span class="bold"><strong>feedback</strong></span>
  51. that the execution of the test case provides is an important cue, for the
  52. following reasons:
  53. </p>
  54. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  55. <li class="listitem">
  56. within the scheme of a continuous build/test, the logs available from
  57. the server contain this information, which points to a particular statement
  58. in the code
  59. </li>
  60. <li class="listitem">
  61. the <span class="bold"><strong>cost</strong></span> for reproducing an error is
  62. induced by the following steps:
  63. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
  64. <li class="listitem">
  65. identify the test module that failed in case there are many
  66. </li>
  67. <li class="listitem">
  68. compile and run the test module to reproduce the error
  69. </li>
  70. <li class="listitem">
  71. identify the line of the code that failed,
  72. </li>
  73. <li class="listitem">
  74. fix the test directly if all the information is enough, or start
  75. a debug session
  76. </li>
  77. </ul></div>
  78. </li>
  79. </ul></div>
  80. <p>
  81. We can see from the scheme above that reproduction of an error is <span class="emphasis"><em>costly</em></span>,
  82. since usually one tends to reproduce the error, which in turn induces at
  83. least the compilation of the test module. Also, a hidden cost is the lookup
  84. at the line of code that contains the failing statement, which triggers a
  85. sequence of back and forth lookup between the log on one hand and the code
  86. on the other hand.
  87. </p>
  88. <p>
  89. The information extracted from the logs suggests the following fact:
  90. </p>
  91. <div class="tip"><table border="0" summary="Tip">
  92. <tr>
  93. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../doc/src/images/tip.png"></td>
  94. <th align="left">Tip</th>
  95. </tr>
  96. <tr><td align="left" valign="top"><p>
  97. Richness of the information contained in the logs is a key for the rapid
  98. understanding and the resolution of a failed statement
  99. </p></td></tr>
  100. </table></div>
  101. <h4>
  102. <a name="boost_test.testing_tools.reports.h1"></a>
  103. <span class="phrase"><a name="boost_test.testing_tools.reports.default_reporting"></a></span><a class="link" href="reports.html#boost_test.testing_tools.reports.default_reporting">Default
  104. reporting</a>
  105. </h4>
  106. <p>
  107. When an assertion fails, <a class="link" href="../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a> reports details and values
  108. on the operands of <code class="computeroutput"><span class="identifier">statement</span></code>
  109. that lead to the failure.
  110. </p>
  111. <h6>
  112. <a name="boost_test.testing_tools.reports.h2"></a>
  113. <span class="phrase"><a name="boost_test.testing_tools.reports.example_descr"></a></span><a class="link" href="reports.html#boost_test.testing_tools.reports.example_descr">Example:
  114. BOOST_TEST reporting</a>
  115. </h6>
  116. <div class="informaltable"><table class="table">
  117. <colgroup><col></colgroup>
  118. <thead><tr><th>
  119. <p>
  120. Code
  121. </p>
  122. </th></tr></thead>
  123. <tbody><tr><td>
  124. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">boost_test_macro3</span>
  125. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  126. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_op_reportings</span> <span class="special">)</span>
  127. <span class="special">{</span>
  128. <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">13</span><span class="special">,</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">12</span><span class="special">;</span>
  129. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">);</span>
  130. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  131. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  132. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special">&gt;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span><span class="special">);</span>
  133. <span class="special">}</span>
  134. </pre>
  135. </td></tr></tbody>
  136. </table></div>
  137. <div class="informaltable"><table class="table">
  138. <colgroup><col></colgroup>
  139. <thead><tr><th>
  140. <p>
  141. Output
  142. </p>
  143. </th></tr></thead>
  144. <tbody><tr><td>
  145. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="special">./</span><span class="identifier">boost_test_macro3</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
  146. <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
  147. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span>
  148. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_op_reportings"</span>
  149. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">15</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">!=</span> <span class="number">12</span><span class="special">]</span>
  150. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">16</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">&lt;</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">&gt;=</span> <span class="number">12</span><span class="special">]</span>
  151. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">17</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&gt;=</span> <span class="number">12</span><span class="special">]</span>
  152. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">18</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special">&gt;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">12</span> <span class="special">&lt;=</span> <span class="number">12</span><span class="special">]</span>
  153. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_op_reportings"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">484u</span><span class="identifier">s</span>
  154. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">588u</span><span class="identifier">s</span>
  155. <span class="special">***</span> <span class="number">2</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span>
  156. </pre>
  157. </td></tr></tbody>
  158. </table></div>
  159. <p>
  160. In the above example, the values of the operands are reported for inspection,
  161. which is more valuable as a copy of the full statement. However, we can observe
  162. that they are not treated symmetrically:
  163. </p>
  164. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  165. <li class="listitem">
  166. "<code class="computeroutput"><span class="identifier">a</span> <span class="special">-</span>
  167. <span class="number">1</span> <span class="special">&lt;</span>
  168. <span class="identifier">b</span></code>" reports <code class="computeroutput"><span class="string">"13 - 1 &gt;= 12"</span> <span class="identifier">failed</span></code>
  169. </li>
  170. <li class="listitem">
  171. "<code class="computeroutput"><span class="identifier">b</span> <span class="special">&gt;</span>
  172. <span class="identifier">a</span> <span class="special">-</span>
  173. <span class="number">1</span></code>" reports <code class="computeroutput"><span class="string">"12
  174. &lt;= 12"</span> <span class="identifier">failed</span></code>
  175. </li>
  176. </ul></div>
  177. <p>
  178. More details on how the <span class="emphasis"><em>Unit Test Framework</em></span> parses the
  179. statement are given in <a class="link" href="internal_details.html" title="BOOST_TEST: details on expressions">this</a>
  180. section.
  181. </p>
  182. <h4>
  183. <a name="boost_test.testing_tools.reports.h3"></a>
  184. <span class="phrase"><a name="boost_test.testing_tools.reports.custom_messages"></a></span><a class="link" href="reports.html#boost_test.testing_tools.reports.custom_messages">Custom
  185. messages</a>
  186. </h4>
  187. <p>
  188. While perfectly exact and precise, the file name, test case name, line number
  189. of a failed statement carry an information that is partial with regards to
  190. the meaning of the failed statement. Sometimes these information are not
  191. informative enough. The <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code>
  192. macro let you override the default message by the use of a second argument,
  193. as shown on the following example.
  194. </p>
  195. <h6>
  196. <a name="boost_test.testing_tools.reports.h4"></a>
  197. <span class="phrase"><a name="boost_test.testing_tools.reports.example_descr0"></a></span><a class="link" href="reports.html#boost_test.testing_tools.reports.example_descr0">Example:
  198. BOOST_TEST optional failure message</a>
  199. </h6>
  200. <div class="informaltable"><table class="table">
  201. <colgroup><col></colgroup>
  202. <thead><tr><th>
  203. <p>
  204. Code
  205. </p>
  206. </th></tr></thead>
  207. <tbody><tr><td>
  208. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">boost_test_message</span>
  209. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  210. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_message</span> <span class="special">)</span>
  211. <span class="special">{</span>
  212. <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">a</span><span class="special">(</span><span class="number">1</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
  213. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">,</span> <span class="string">"a should be equal to b: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</span> <span class="special">&lt;&lt;</span> <span class="string">"!="</span> <span class="special">&lt;&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  214. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">!=</span> <span class="number">10</span><span class="special">,</span> <span class="string">"value of a="</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</span><span class="special">);</span>
  215. <span class="special">}</span>
  216. </pre>
  217. </td></tr></tbody>
  218. </table></div>
  219. <div class="informaltable"><table class="table">
  220. <colgroup><col></colgroup>
  221. <thead><tr><th>
  222. <p>
  223. Output
  224. </p>
  225. </th></tr></thead>
  226. <tbody><tr><td>
  227. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="special">./</span><span class="identifier">boost_test_message</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
  228. <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
  229. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_message"</span>
  230. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_message"</span>
  231. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">15</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_message"</span><span class="special">:</span> <span class="identifier">a</span> <span class="identifier">should</span> <span class="identifier">be</span> <span class="identifier">equal</span> <span class="identifier">to</span> <span class="identifier">b</span><span class="special">:</span> <span class="number">1</span><span class="special">!=</span><span class="number">2</span>
  232. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">16</span><span class="special">):</span> <span class="identifier">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="char">'value of a=1'</span> <span class="identifier">has</span> <span class="identifier">passed</span>
  233. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_message"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">219u</span><span class="identifier">s</span>
  234. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_message"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">318u</span><span class="identifier">s</span>
  235. <span class="special">***</span> <span class="number">1</span> <span class="identifier">failure</span> <span class="identifier">is</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_message"</span>
  236. </pre>
  237. </td></tr></tbody>
  238. </table></div>
  239. </div>
  240. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  241. <td align="left"></td>
  242. <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2019 Boost.Test
  243. contributors<p>
  244. Distributed under the Boost Software License, Version 1.0. (See accompanying
  245. file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
  246. </p>
  247. </div></td>
  248. </tr></table>
  249. <hr>
  250. <div class="spirit-nav">
  251. <a accesskey="p" href="boost_test_universal_macro.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../testing_tools.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="extended_comparison.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  252. </div>
  253. </body>
  254. </html>