1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 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"><</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">></span> 107 108<span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite1</span> <span class="special">)</span> 109 110<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case1</span> <span class="special">)</span> 111<span class="special">{</span> 112 <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"><</span> <span class="number">4U</span> <span class="special">);</span> 113<span class="special">}</span> 114 115<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case2</span> <span class="special">)</span> 116<span class="special">{</span> 117 <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> 118 <span class="identifier">BOOST_FAIL</span><span class="special">(</span> <span class="string">"Should never reach this line"</span> <span class="special">);</span> 119<span class="special">}</span> 120 121<span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span> 122<span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite2</span> <span class="special">)</span> 123 124<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case3</span> <span class="special">)</span> 125<span class="special">{</span> 126 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span> 127<span class="special">}</span> 128 129<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case4</span> <span class="special">)</span> 130<span class="special">{</span> 131 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">false</span> <span class="special">);</span> 132<span class="special">}</span> 133 134<span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span> 135</pre> 136 </td></tr></tbody> 137</table></div> 138<div class="informaltable"><table class="table"> 139<colgroup><col></colgroup> 140<thead><tr><th> 141 <p> 142 Output 143 </p> 144 </th></tr></thead> 145<tbody><tr><td> 146<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">example</span> 147<span class="identifier">Running</span> <span class="number">4</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 148<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> 149<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> 150 151<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> 152</pre> 153 </td></tr></tbody> 154</table></div> 155<p> 156 As you can see test tree construction in this example is more straightforward 157 and automated. 158 </p> 159<p> 160 In the example below, the test suite <code class="computeroutput"><span class="identifier">test_suite</span></code> 161 consists of two parts. Their definition is remote and is separated by another 162 test case. In fact these parts may even reside in different test files. 163 The resulting test tree remains the same. As you can see from the output 164 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 165 <code class="computeroutput"><span class="identifier">test_suite</span></code>. 166 </p> 167<h6> 168<a name="boost_test.tests_organization.test_tree.test_suite.h2"></a> 169 <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: 170 Test suite extension using automated registration facility</a> 171 </h6> 172<div class="informaltable"><table class="table"> 173<colgroup><col></colgroup> 174<thead><tr><th> 175 <p> 176 Code 177 </p> 178 </th></tr></thead> 179<tbody><tr><td> 180<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> 181<span class="preprocessor">#include</span> <span class="special"><</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">></span> 182 183<span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite</span> <span class="special">)</span> 184 185<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case1</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 1"</span> <span class="special">);</span> 188<span class="special">}</span> 189 190<span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span> 191 192 193<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> 194<span class="special">{</span> 195 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="special">);</span> 196<span class="special">}</span> 197 198<span class="identifier">BOOST_AUTO_TEST_SUITE</span><span class="special">(</span> <span class="identifier">test_suite</span> <span class="special">)</span> 199 200<span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_case2</span> <span class="special">)</span> 201<span class="special">{</span> 202 <span class="identifier">BOOST_ERROR</span><span class="special">(</span> <span class="string">"some error 2"</span> <span class="special">);</span> 203<span class="special">}</span> 204 205<span class="identifier">BOOST_AUTO_TEST_SUITE_END</span><span class="special">()</span> 206</pre> 207 </td></tr></tbody> 208</table></div> 209<div class="informaltable"><table class="table"> 210<colgroup><col></colgroup> 211<thead><tr><th> 212 <p> 213 Output 214 </p> 215 </th></tr></thead> 216<tbody><tr><td> 217<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></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> 218<span class="identifier">Running</span> <span class="number">3</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 219<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> 220<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> 221 222<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> 223 <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> 224 <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> 225 <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> 226 <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> 227 228 <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> 229 <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> 230 <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> 231 232 <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> 233 <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> 234 235 <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> 236 <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> 237 238 <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> 239 <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> 240</pre> 241 </td></tr></tbody> 242</table></div> 243<h4> 244<a name="boost_test.tests_organization.test_tree.test_suite.h3"></a> 245 <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 246 suites with manual registration</a> 247 </h4> 248<p> 249 To create a test suite manually you need to 250 </p> 251<div class="orderedlist"><ol class="orderedlist" type="1"> 252<li class="listitem"> 253 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> 254 class, 255 </li> 256<li class="listitem"> 257 register it in test tree, and 258 </li> 259<li class="listitem"> 260 populate it with test cases (or lower level test suites). 261 </li> 262</ol></div> 263<a name="ref_test_case_registration"></a><h5> 264<a name="boost_test.tests_organization.test_tree.test_suite.h4"></a> 265 <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 266 unit registration interface</a> 267 </h5> 268<p> 269 The <span class="emphasis"><em>Unit Test Framework</em></span> models the notion of test 270 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>. 271 For complete class interface reference check advanced section of this documentation. 272 Here you should only be interested in a single test unit registration interface: 273 </p> 274<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> 275</pre> 276<p> 277 The first parameter is a pointer to a newly created test unit. The second 278 optional parameter - expected_failures - defines the number of test assertions 279 that are expected to fail within the test unit. By default no errors are 280 expected. 281 </p> 282<div class="caution"><table border="0" summary="Caution"> 283<tr> 284<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td> 285<th align="left">Caution</th> 286</tr> 287<tr><td align="left" valign="top"><p> 288 Be careful when supplying a number of expected failures for test suites. 289 By default the <span class="emphasis"><em>Unit Test Framework</em></span> calculates the 290 number of expected failures in test suite as the sum of appropriate values 291 in all test units that constitute it. And it rarely makes sense to change 292 this. 293 </p></td></tr> 294</table></div> 295<p> 296 The third optional parameter - <code class="computeroutput"><span class="identifier">timeout</span></code> 297 - defines the timeout value for the test unit. As of now the <span class="emphasis"><em>Unit 298 Test Framework</em></span> isn't able to set a timeout for the test suite 299 execution, so this parameter makes sense only for test case registration. 300 By default no timeout is set. See the method <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html#idm45267286747104-bb">boost::unit_test::test_suite::add</a></code> 301 for more details about the timeout value. 302 </p> 303<p> 304 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 305 another <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html#idm45267286747104-bb">add</a></code> interface covered in 306 the advanced section of this documentation. 307 </p> 308<a name="ref_BOOST_TEST_SUITE"></a><h5> 309<a name="boost_test.tests_organization.test_tree.test_suite.h5"></a> 310 <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 311 suite instance construction</a> 312 </h5> 313<p> 314 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 315 implementation details and you only required to specify the test suite 316 name: 317 </p> 318<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> 319</pre> 320<p> 321 <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 322 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 323 constructed instance. Alternatively you can create an instance of class 324 <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. 325 </p> 326<div class="caution"><table border="0" summary="Caution"> 327<tr> 328<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td> 329<th align="left">Caution</th> 330</tr> 331<tr><td align="left" valign="top"><p> 332 <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 333 on the heap and the compiler won't allow you to create one on the stack. 334 </p></td></tr> 335</table></div> 336<p> 337 Newly created test suite has to be registered in a parent one using the 338 <code class="computeroutput"><span class="identifier">add</span></code> interface. Both test 339 suite creation and registration is performed in the test module initialization 340 function. 341 </p> 342<p> 343 The example below creates a test tree, which can be represented by the 344 following hierarchy: 345 </p> 346<p> 347 <span class="inlinemediaobject"><img src="../../../images/class-hier.jpg"></span> 348 </p> 349<h6> 350<a name="boost_test.tests_organization.test_tree.test_suite.h6"></a> 351 <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: 352 Manually registered test suites</a> 353 </h6> 354<div class="informaltable"><table class="table"> 355<colgroup><col></colgroup> 356<thead><tr><th> 357 <p> 358 Code 359 </p> 360 </th></tr></thead> 361<tbody><tr><td> 362<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</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">></span> 363<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> 364 365<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> 366<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> 367<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> 368<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> 369 370<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> 371<span class="special">{</span> 372 <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> 373 <span class="identifier">ts1</span><span class="special">-></span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_case1</span> <span class="special">)</span> <span class="special">);</span> 374 <span class="identifier">ts1</span><span class="special">-></span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_case2</span> <span class="special">)</span> <span class="special">);</span> 375 376 <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> 377 <span class="identifier">ts2</span><span class="special">-></span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_case3</span> <span class="special">)</span> <span class="special">);</span> 378 <span class="identifier">ts2</span><span class="special">-></span><span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_case4</span> <span class="special">)</span> <span class="special">);</span> 379 380 <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> 381 <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> 382 383 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> 384<span class="special">}</span> 385</pre> 386 </td></tr></tbody> 387</table></div> 388<div class="informaltable"><table class="table"> 389<colgroup><col></colgroup> 390<thead><tr><th> 391 <p> 392 Output 393 </p> 394 </th></tr></thead> 395<tbody><tr><td> 396<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></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> 397<span class="identifier">Running</span> <span class="number">4</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 398<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"Master Test Suite"</span> 399<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite1"</span> 400<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case1"</span> 401<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case1"</span> 402<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case2"</span> 403<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case2"</span> 404<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite1"</span> 405<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite2"</span> 406<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case3"</span> 407<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case3"</span> 408<span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case4"</span> 409<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_case4"</span> 410<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"test_suite2"</span> 411<span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">suite</span> <span class="string">"Master Test Suite"</span> 412 413<span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span> 414</pre> 415 </td></tr></tbody> 416</table></div> 417</div> 418<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 419<td align="left"></td> 420<td align="right"><div class="copyright-footer">Copyright © 2001-2020 Boost.Test contributors<p> 421 Distributed under the Boost Software License, Version 1.0. (See accompanying 422 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>) 423 </p> 424</div></td> 425</tr></table> 426<hr> 427<div class="spirit-nav"> 428<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> 429</div> 430</body> 431</html> 432