test_suite.html 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Test suite</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="../test_tree.html" title="Test tree">
  9. <link rel="prev" href="../test_tree.html" title="Test tree">
  10. <link rel="next" href="master_test_suite.html" title="Master test suite">
  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="../test_tree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_tree.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="master_test_suite.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h4 class="title">
  27. <a name="boost_test.tests_organization.test_tree.test_suite"></a><a class="link" href="test_suite.html" title="Test suite">Test
  28. suite</a>
  29. </h4></div></div></div>
  30. <p>
  31. If you consider test cases as leaves on the test tree, the test suite can
  32. be considered as branch and the <span class="emphasis"><em>master test suite</em></span>
  33. as the <span class="emphasis"><em>root</em></span>. Unlike real trees though, our tree in
  34. many cases consists only of leaves attached directly to the root. This
  35. is common for all test cases to reside directly in the master test suite.
  36. If you do want to construct a hierarchical test suite structure the <span class="emphasis"><em>Unit
  37. Test Framework</em></span> provides both manual and automated test suite
  38. creation and registration facilities:
  39. </p>
  40. <div class="orderedlist"><ol class="orderedlist" type="1">
  41. <li class="listitem">
  42. Test suite with automated registration
  43. </li>
  44. <li class="listitem">
  45. Manually registered test suite
  46. </li>
  47. </ol></div>
  48. <p>
  49. In addition the <span class="emphasis"><em>Unit Test Framework</em></span> presents a notion
  50. of the <a class="link" href="master_test_suite.html" title="Master test suite">Master
  51. test suite</a>. The most important reason to learn about this component
  52. is that it provides an ability to access command line arguments supplied
  53. to a test module.
  54. </p>
  55. <a name="ref_BOOST_AUTO_TEST_SUITE"></a><h4>
  56. <a name="boost_test.tests_organization.test_tree.test_suite.h0"></a>
  57. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.automated_registration"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.automated_registration">Automated
  58. registration</a>
  59. </h4>
  60. <p>
  61. The solution the <span class="emphasis"><em>Unit Test Framework</em></span> presents for
  62. automated test suite creation and registration is designed to facilitate
  63. multiple points of definition, arbitrary test suites depth and smooth integration
  64. with automated test case creation and registration. This facility should
  65. significantly simplify a test tree construction process in comparison with
  66. manual explicit registration case.
  67. </p>
  68. <p>
  69. The implementation is based on the order of file scope variables definitions
  70. within a single compilation unit. The semantic of this facility is very
  71. similar to the namespace feature of C++, including support for test suite
  72. extension. To start test suite use the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_suite.html" title="BOOST_AUTO_TEST_SUITE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_SUITE</span></code></a>. To end
  73. test suite use the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_suite_end.html" title="BOOST_AUTO_TEST_SUITE_END"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_SUITE_END</span></code></a>. The
  74. same test suite can be restarted multiple times inside the same test file
  75. or in a different test files. In a result all test units will be part of
  76. the same test suite in a constructed test tree.
  77. </p>
  78. <pre class="programlisting"><span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite_name</span><span class="special">);</span>
  79. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">();</span>
  80. </pre>
  81. <p>
  82. Test units defined in between test suite start and end declarations become
  83. members of the test suite. A test unit always becomes the member of the
  84. closest test suite declared. Test units declared at a test file scope become
  85. members of the master test suite. There is no limit on depth of test suite
  86. inclusion.
  87. </p>
  88. <p>
  89. This example creates a test tree that matches exactly the one created in
  90. the manual test suite registration example.
  91. </p>
  92. <h6>
  93. <a name="boost_test.tests_organization.test_tree.test_suite.h1"></a>
  94. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.example_descr"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.example_descr">Example:
  95. Test suites with automated registration</a>
  96. </h6>
  97. <div class="informaltable"><table class="table">
  98. <colgroup><col></colgroup>
  99. <thead><tr><th>
  100. <p>
  101. Code
  102. </p>
  103. </th></tr></thead>
  104. <tbody><tr><td>
  105. <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">example</span>
  106. <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>
  107. <span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite1</span> <span class="special">)</span>
  108. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case1</span> <span class="special">)</span>
  109. <span class="special">{</span>
  110. <span class="identifier">BOOST_TEST_WARN</span><span class="special">(</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="special">&lt;</span> <span class="number">4U</span> <span class="special">);</span>
  111. <span class="special">}</span>
  112. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case2</span> <span class="special">)</span>
  113. <span class="special">{</span>
  114. <span class="identifier">BOOST_TEST_REQUIRE</span><span class="special">(</span> <span class="number">1</span> <span class="special">==</span> <span class="number">2</span> <span class="special">);</span>
  115. <span class="identifier">BOOST_FAIL</span><span class="special">(</span> <span class="string">"Should never reach this line"</span> <span class="special">);</span>
  116. <span class="special">}</span>
  117. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  118. <span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite2</span> <span class="special">)</span>
  119. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case3</span> <span class="special">)</span>
  120. <span class="special">{</span>
  121. <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span>
  122. <span class="special">}</span>
  123. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case4</span> <span class="special">)</span>
  124. <span class="special">{</span>
  125. <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">false</span> <span class="special">);</span>
  126. <span class="special">}</span>
  127. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  128. </pre>
  129. </td></tr></tbody>
  130. </table></div>
  131. <div class="informaltable"><table class="table">
  132. <colgroup><col></colgroup>
  133. <thead><tr><th>
  134. <p>
  135. Output
  136. </p>
  137. </th></tr></thead>
  138. <tbody><tr><td>
  139. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">example</span>
  140. <span class="identifier">Running</span> <span class="number">4</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
  141. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">21</span><span class="special">):</span> <span class="identifier">fatal</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_suite1/test_case2"</span><span class="special">:</span> <span class="identifier">critical</span> <span class="identifier">check</span> <span class="number">1</span> <span class="special">==</span> <span class="number">2</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1</span> <span class="special">!=</span> <span class="number">2</span><span class="special">]</span>
  142. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">35</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_suite2/test_case4"</span><span class="special">:</span> <span class="identifier">check</span> <span class="keyword">false</span> <span class="identifier">has</span> <span class="identifier">failed</span>
  143. <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">"example"</span>
  144. </pre>
  145. </td></tr></tbody>
  146. </table></div>
  147. <p>
  148. As you can see test tree construction in this example is more straightforward
  149. and automated.
  150. </p>
  151. <p>
  152. In the example below, the test suite <code class="computeroutput"><span class="identifier">test_suite</span></code>
  153. consists of two parts. Their definition is remote and is separated by another
  154. test case. In fact these parts may even reside in different test files.
  155. The resulting test tree remains the same. As you can see from the output
  156. both <code class="computeroutput"><span class="identifier">test_case1</span></code> and <code class="computeroutput"><span class="identifier">test_case2</span></code> reside in the same test suite
  157. <code class="computeroutput"><span class="identifier">test_suite</span></code>.
  158. </p>
  159. <h6>
  160. <a name="boost_test.tests_organization.test_tree.test_suite.h2"></a>
  161. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.example_descr0"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.example_descr0">Example:
  162. Test suite extension using automated registration facility</a>
  163. </h6>
  164. <div class="informaltable"><table class="table">
  165. <colgroup><col></colgroup>
  166. <thead><tr><th>
  167. <p>
  168. Code
  169. </p>
  170. </th></tr></thead>
  171. <tbody><tr><td>
  172. <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">example</span>
  173. <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>
  174. <span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite</span> <span class="special">)</span>
  175. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case1</span> <span class="special">)</span>
  176. <span class="special">{</span>
  177. <span class="identifier">BOOST_ERROR</span><span class="special">(</span> <span class="string">"some error 1"</span> <span class="special">);</span>
  178. <span class="special">}</span>
  179. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  180. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case_on_file_scope</span> <span class="special">)</span>
  181. <span class="special">{</span>
  182. <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span>
  183. <span class="special">}</span>
  184. <span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite</span> <span class="special">)</span>
  185. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case2</span> <span class="special">)</span>
  186. <span class="special">{</span>
  187. <span class="identifier">BOOST_ERROR</span><span class="special">(</span> <span class="string">"some error 2"</span> <span class="special">);</span>
  188. <span class="special">}</span>
  189. <span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span>
  190. </pre>
  191. </td></tr></tbody>
  192. </table></div>
  193. <div class="informaltable"><table class="table">
  194. <colgroup><col></colgroup>
  195. <thead><tr><th>
  196. <p>
  197. Output
  198. </p>
  199. </th></tr></thead>
  200. <tbody><tr><td>
  201. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span><span class="identifier">example</span> <span class="special">--</span><span class="identifier">report_level</span><span class="special">=</span><span class="identifier">detailed</span>
  202. <span class="identifier">Running</span> <span class="number">3</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
  203. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">8</span><span class="special">):</span> <span class="identifier">error</span> <span class="identifier">in</span> <span class="string">"test_case1"</span><span class="special">:</span> <span class="identifier">some</span> <span class="identifier">error</span> <span class="number">1</span>
  204. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">23</span><span class="special">):</span> <span class="identifier">error</span> <span class="identifier">in</span> <span class="string">"test_case2"</span><span class="special">:</span> <span class="identifier">some</span> <span class="identifier">error</span> <span class="number">2</span>
  205. <span class="identifier">Test</span> <span class="identifier">suite</span> <span class="string">"example"</span> <span class="identifier">failed</span> <span class="identifier">with</span><span class="special">:</span>
  206. <span class="number">1</span> <span class="identifier">assertion</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">3</span> <span class="identifier">passed</span>
  207. <span class="number">2</span> <span class="identifier">assertions</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">3</span> <span class="identifier">failed</span>
  208. <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">3</span> <span class="identifier">passed</span>
  209. <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">3</span> <span class="identifier">failed</span>
  210. <span class="identifier">Test</span> <span class="identifier">suite</span> <span class="string">"test_suite"</span> <span class="identifier">failed</span> <span class="identifier">with</span><span class="special">:</span>
  211. <span class="number">2</span> <span class="identifier">assertions</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">2</span> <span class="identifier">failed</span>
  212. <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">2</span> <span class="identifier">failed</span>
  213. <span class="identifier">Test</span> <span class="keyword">case</span> <span class="string">"test_case1"</span> <span class="identifier">failed</span> <span class="identifier">with</span><span class="special">:</span>
  214. <span class="number">1</span> <span class="identifier">assertion</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">1</span> <span class="identifier">failed</span>
  215. <span class="identifier">Test</span> <span class="keyword">case</span> <span class="string">"test_case2"</span> <span class="identifier">failed</span> <span class="identifier">with</span><span class="special">:</span>
  216. <span class="number">1</span> <span class="identifier">assertion</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">1</span> <span class="identifier">failed</span>
  217. <span class="identifier">Test</span> <span class="keyword">case</span> <span class="string">"test_case_on_file_scope"</span> <span class="identifier">passed</span> <span class="identifier">with</span><span class="special">:</span>
  218. <span class="number">1</span> <span class="identifier">assertion</span> <span class="identifier">out</span> <span class="identifier">of</span> <span class="number">1</span> <span class="identifier">passed</span>
  219. </pre>
  220. </td></tr></tbody>
  221. </table></div>
  222. <h4>
  223. <a name="boost_test.tests_organization.test_tree.test_suite.h3"></a>
  224. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.test_suites_with_manual_registra"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.test_suites_with_manual_registra">Test
  225. suites with manual registration</a>
  226. </h4>
  227. <p>
  228. To create a test suite manually you need to
  229. </p>
  230. <div class="orderedlist"><ol class="orderedlist" type="1">
  231. <li class="listitem">
  232. create an instance of <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html" title="Class test_suite">boost::unit_test::test_suite</a></code>
  233. class,
  234. </li>
  235. <li class="listitem">
  236. register it in test tree, and
  237. </li>
  238. <li class="listitem">
  239. populate it with test cases (or lower level test suites).
  240. </li>
  241. </ol></div>
  242. <a name="ref_test_case_registration"></a><h5>
  243. <a name="boost_test.tests_organization.test_tree.test_suite.h4"></a>
  244. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.test_unit_registration_interface"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.test_unit_registration_interface">Test
  245. unit registration interface</a>
  246. </h5>
  247. <p>
  248. The <span class="emphasis"><em>Unit Test Framework</em></span> models the notion of test
  249. case container - test suite - using class <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html" title="Class test_suite">boost::unit_test::test_suite</a></code>.
  250. For complete class interface reference check advanced section of this documentation.
  251. Here you should only be interested in a single test unit registration interface:
  252. </p>
  253. <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">test_suite</span><span class="special">::</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">test_unit</span><span class="special">*</span> <span class="identifier">tc</span><span class="special">,</span> <span class="identifier">counter_t</span> <span class="identifier">expected_failures</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">timeout</span> <span class="special">=</span> <span class="number">0</span> <span class="special">);</span>
  254. </pre>
  255. <p>
  256. The first parameter is a pointer to a newly created test unit. The second
  257. optional parameter - expected_failures - defines the number of test assertions
  258. that are expected to fail within the test unit. By default no errors are
  259. expected.
  260. </p>
  261. <div class="caution"><table border="0" summary="Caution">
  262. <tr>
  263. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
  264. <th align="left">Caution</th>
  265. </tr>
  266. <tr><td align="left" valign="top"><p>
  267. Be careful when supplying a number of expected failures for test suites.
  268. By default the <span class="emphasis"><em>Unit Test Framework</em></span> calculates the
  269. number of expected failures in test suite as the sum of appropriate values
  270. in all test units that constitute it. And it rarely makes sense to change
  271. this.
  272. </p></td></tr>
  273. </table></div>
  274. <p>
  275. The third optional parameter - <code class="computeroutput"><span class="identifier">timeout</span></code>
  276. - defines the timeout value for the test unit. As of now the <span class="emphasis"><em>Unit
  277. Test Framework</em></span> isn't able to set a timeout for the test suite
  278. execution, so this parameter makes sense only for test case registration.
  279. By default no timeout is set. See the method <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html#idm46279112866240-bb">boost::unit_test::test_suite::add</a></code>
  280. for more details about the timeout value.
  281. </p>
  282. <p>
  283. To register group of test units in one function call, the <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html" title="Class test_suite">test_suite</a></code> class provides
  284. another <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html#idm46279112866240-bb">add</a></code> interface covered in
  285. the advanced section of this documentation.
  286. </p>
  287. <a name="ref_BOOST_TEST_SUITE"></a><h5>
  288. <a name="boost_test.tests_organization.test_tree.test_suite.h5"></a>
  289. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.test_suite_instance_construction"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.test_suite_instance_construction">Test
  290. suite instance construction</a>
  291. </h5>
  292. <p>
  293. To create a test suite instance manually, employ the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_suite.html" title="BOOST_TEST_SUITE"><code class="computeroutput"><span class="identifier">BOOST_TEST_SUITE</span></code></a>. It hides all
  294. implementation details and you only required to specify the test suite
  295. name:
  296. </p>
  297. <pre class="programlisting"><span class="identifier">BOOST_TEST_SUITE</span><span class="special">(</span><span class="identifier">test_suite_name</span><span class="special">);</span>
  298. </pre>
  299. <p>
  300. <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_suite.html" title="BOOST_TEST_SUITE"><code class="computeroutput"><span class="identifier">BOOST_TEST_SUITE</span></code></a> creates an instance
  301. of the class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">test_suite</span></code> and returns a pointer to the
  302. constructed instance. Alternatively you can create an instance of class
  303. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">test_suite</span></code> yourself.
  304. </p>
  305. <div class="caution"><table border="0" summary="Caution">
  306. <tr>
  307. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
  308. <th align="left">Caution</th>
  309. </tr>
  310. <tr><td align="left" valign="top"><p>
  311. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">test_suite</span></code> instances have to be allocated
  312. on the heap and the compiler won't allow you to create one on the stack.
  313. </p></td></tr>
  314. </table></div>
  315. <p>
  316. Newly created test suite has to be registered in a parent one using the
  317. <code class="computeroutput"><span class="identifier">add</span></code> interface. Both test
  318. suite creation and registration is performed in the test module initialization
  319. function.
  320. </p>
  321. <p>
  322. The example below creates a test tree, which can be represented by the
  323. following hierarchy:
  324. </p>
  325. <p>
  326. <span class="inlinemediaobject"><img src="../../../images/class-hier.jpg"></span>
  327. </p>
  328. <h6>
  329. <a name="boost_test.tests_organization.test_tree.test_suite.h6"></a>
  330. <span class="phrase"><a name="boost_test.tests_organization.test_tree.test_suite.example_descr1"></a></span><a class="link" href="test_suite.html#boost_test.tests_organization.test_tree.test_suite.example_descr1">Example:
  331. Manually registered test suites</a>
  332. </h6>
  333. <div class="informaltable"><table class="table">
  334. <colgroup><col></colgroup>
  335. <thead><tr><th>
  336. <p>
  337. Code
  338. </p>
  339. </th></tr></thead>
  340. <tbody><tr><td>
  341. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><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>
  342. <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">;</span>
  343. <span class="keyword">void</span> <span class="identifier">test_case1</span><span class="special">()</span> <span class="special">{</span> <span class="comment">/* ... */</span> <span class="special">}</span>
  344. <span class="keyword">void</span> <span class="identifier">test_case2</span><span class="special">()</span> <span class="special">{</span> <span class="comment">/* ... */</span> <span class="special">}</span>
  345. <span class="keyword">void</span> <span class="identifier">test_case3</span><span class="special">()</span> <span class="special">{</span> <span class="comment">/* ... */</span> <span class="special">}</span>
  346. <span class="keyword">void</span> <span class="identifier">test_case4</span><span class="special">()</span> <span class="special">{</span> <span class="comment">/* ... */</span> <span class="special">}</span>
  347. <span class="identifier">test_suite</span><span class="special">*</span> <span class="identifier">init_unit_test_suite</span><span class="special">(</span> <span class="keyword">int</span> <span class="comment">/*argc*/</span><span class="special">,</span> <span class="keyword">char</span><span class="special">*</span> <span class="comment">/*argv*/</span><span class="special">[]</span> <span class="special">)</span>
  348. <span class="special">{</span>
  349. <span class="identifier">test_suite</span><span class="special">*</span> <span class="identifier">ts1</span> <span class="special">=</span> <span class="identifier">BOOST_TEST_SUITE</span><span class="special">(</span> <span class="string">"test_suite1"</span> <span class="special">);</span>
  350. <span class="identifier">ts1</span><span class="special">-&gt;</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&amp;</span><span class="identifier">test_case1</span> <span class="special">)</span> <span class="special">);</span>
  351. <span class="identifier">ts1</span><span class="special">-&gt;</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&amp;</span><span class="identifier">test_case2</span> <span class="special">)</span> <span class="special">);</span>
  352. <span class="identifier">test_suite</span><span class="special">*</span> <span class="identifier">ts2</span> <span class="special">=</span> <span class="identifier">BOOST_TEST_SUITE</span><span class="special">(</span> <span class="string">"test_suite2"</span> <span class="special">);</span>
  353. <span class="identifier">ts2</span><span class="special">-&gt;</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&amp;</span><span class="identifier">test_case3</span> <span class="special">)</span> <span class="special">);</span>
  354. <span class="identifier">ts2</span><span class="special">-&gt;</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&amp;</span><span class="identifier">test_case4</span> <span class="special">)</span> <span class="special">);</span>
  355. <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">ts1</span> <span class="special">);</span>
  356. <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">ts2</span> <span class="special">);</span>
  357. <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
  358. <span class="special">}</span>
  359. </pre>
  360. </td></tr></tbody>
  361. </table></div>
  362. <div class="informaltable"><table class="table">
  363. <colgroup><col></colgroup>
  364. <thead><tr><th>
  365. <p>
  366. Output
  367. </p>
  368. </th></tr></thead>
  369. <tbody><tr><td>
  370. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="identifier">example</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">test_suite</span>
  371. <span class="identifier">Running</span> <span class="number">4</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
  372. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"Master Test Suite"</span>
  373. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite1"</span>
  374. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case1"</span>
  375. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case1"</span>
  376. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case2"</span>
  377. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case2"</span>
  378. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite1"</span>
  379. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite2"</span>
  380. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case3"</span>
  381. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case3"</span>
  382. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case4"</span>
  383. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case4"</span>
  384. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite2"</span>
  385. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"Master Test Suite"</span>
  386. <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
  387. </pre>
  388. </td></tr></tbody>
  389. </table></div>
  390. </div>
  391. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  392. <td align="left"></td>
  393. <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2019 Boost.Test
  394. contributors<p>
  395. Distributed under the Boost Software License, Version 1.0. (See accompanying
  396. 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>)
  397. </p>
  398. </div></td>
  399. </tr></table>
  400. <hr>
  401. <div class="spirit-nav">
  402. <a accesskey="p" href="../test_tree.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_tree.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="master_test_suite.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
  403. </div>
  404. </body>
  405. </html>