3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Test cases without parameters</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_cases.html" title="Test cases">
9 <link rel="prev" href="../test_cases.html" title="Test cases">
10 <link rel="next" href="test_case_generation.html" title="Data-driven test cases">
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>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../test_cases.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_cases.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="test_case_generation.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="boost_test.tests_organization.test_cases.test_organization_nullary"></a><a class="link" href="test_organization_nullary.html" title="Test cases without parameters">Test
28 cases without parameters</a>
29 </h4></div></div></div>
31 The most common scenario is that you want to write test case without any
32 parameters. The <span class="emphasis"><em>Unit Test Framework</em></span> provides you with
33 both automatic and manual registration APIs to declare such test case.
35 <a name="ref_BOOST_AUTO_TEST_CASE"></a><h5>
36 <a name="boost_test.tests_organization.test_cases.test_organization_nullary.h0"></a>
37 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_organization_nullary.automated_registration"></a></span><a class="link" href="test_organization_nullary.html#boost_test.tests_organization.test_cases.test_organization_nullary.automated_registration">Automated
41 To declare a test case without parameters, which is registered in place
42 of implementation, employ the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_case.html" title="BOOST_AUTO_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_CASE</span></code></a>.
44 <pre class="programlisting"><a class="link" href="../../utf_reference/test_org_reference/test_org_boost_auto_test_case.html" title="BOOST_AUTO_TEST_CASE"><code class="computeroutput"><span class="identifier">BOOST_AUTO_TEST_CASE</span></code></a><span class="special">(</span><span class="identifier">test_case_name</span><span class="special">);</span>
47 This API is designed to closely mimic nullary free function declaration
48 syntax. In comparison with free function all you need to do is to skip
49 result type and brackets and wrap test case name into BOOST_AUTO_TEST_CASE:
52 <a name="boost_test.tests_organization.test_cases.test_organization_nullary.h1"></a>
53 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_organization_nullary.example_descr"></a></span><a class="link" href="test_organization_nullary.html#boost_test.tests_organization.test_cases.test_organization_nullary.example_descr">Example:
54 Nullary function based test case with automated registration</a>
56 <div class="informaltable"><table class="table">
57 <colgroup><col></colgroup>
64 <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>
65 <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>
67 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">free_test_function</span> <span class="special">)</span>
68 <span class="comment">/* Compare with void free_test_function() */</span>
69 <span class="special">{</span>
70 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="comment">/* test assertion */</span> <span class="special">);</span>
71 <span class="special">}</span>
75 <div class="informaltable"><table class="table">
76 <colgroup><col></colgroup>
83 <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>
84 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
86 <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
91 With this macro you don't need to implement any other registration steps.
92 The macro creates and registers the test case with the name <code class="computeroutput"><span class="identifier">free_test_function</span></code> automatically.
94 <a name="ref_BOOST_TEST_CASE"></a><h5>
95 <a name="boost_test.tests_organization.test_cases.test_organization_nullary.h2"></a>
96 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_organization_nullary.manual_registration"></a></span><a class="link" href="test_organization_nullary.html#boost_test.tests_organization.test_cases.test_organization_nullary.manual_registration">Manual
100 The <span class="emphasis"><em>Unit Test Framework</em></span> allows to manually create
101 test case without parameters based on nullary free functions, nullary function
102 objects (including those created with <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span></code>
103 and nullary <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function</span></code> instances). To do this, employ
104 the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_case.html" title="BOOST_TEST_CASE and BOOST_TEST_CASE_NAME"><code class="computeroutput"><span class="identifier">BOOST_TEST_CASE</span></code></a>:
106 <pre class="programlisting"><span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span><span class="identifier">test_function</span><span class="special">);</span>
109 <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_case.html" title="BOOST_TEST_CASE and BOOST_TEST_CASE_NAME"><code class="computeroutput"><span class="identifier">BOOST_TEST_CASE</span></code></a> creates an instance
110 of the class <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_case.html" title="Class test_case">boost::unit_test::test_case</a></code>
111 and returns a pointer to the constructed instance. The test case name is
112 deduced from the macro argument test_function. If you prefer to assign
113 a different test case name, you have either to
115 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
116 <li class="listitem">
117 use the macro <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_case.html" title="BOOST_TEST_CASE and BOOST_TEST_CASE_NAME"><code class="computeroutput"><span class="identifier">BOOST_TEST_CASE_NAME</span></code></a> instead
119 <li class="listitem">
120 or use the underlying <code class="computeroutput"><a class="link" href="../../../header/boost/test/tree/test_unit_hpp.html" title="Header <boost/test/tree/test_unit.hpp>">make_test_case</a></code> interface
125 To register a new test case, employ the method <code class="computeroutput"><a class="link" href="../../../boost/unit_test/test_suite.html#idm46279112866240-bb">test_suite::add</a></code>. Both test case creation
126 and registration are performed in the <a class="link" href="../../adv_scenarios/test_module_init_overview.html" title="Test module's initialization">test
127 module initialization function</a>.
130 Here is the simplest example of manually registered test case. A single
131 test case is created and registered inside the test module initialization
132 routine. Note that the free function name is passed by address to the macro
133 <a class="link" href="../../utf_reference/test_org_reference/test_org_boost_test_case.html" title="BOOST_TEST_CASE and BOOST_TEST_CASE_NAME"><code class="computeroutput"><span class="identifier">BOOST_TEST_CASE</span></code></a>`.
135 <a name="ref_bt_example01"></a><h6>
136 <a name="boost_test.tests_organization.test_cases.test_organization_nullary.h3"></a>
137 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_organization_nullary.example_descr0"></a></span><a class="link" href="test_organization_nullary.html#boost_test.tests_organization.test_cases.test_organization_nullary.example_descr0">Example:
138 Nullary free function manually registered</a>
140 <div class="informaltable"><table class="table">
141 <colgroup><col></colgroup>
148 <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>
149 <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>
151 <span class="keyword">void</span> <span class="identifier">free_test_function</span><span class="special">()</span>
152 <span class="special">{</span>
153 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="comment">/* test assertion */</span> <span class="special">);</span>
154 <span class="special">}</span>
156 <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>
157 <span class="special">{</span>
158 <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span>
159 <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">free_test_function</span> <span class="special">)</span> <span class="special">);</span>
160 <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span>
161 <span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE_NAME</span><span class="special">(</span> <span class="special">&</span><span class="identifier">free_test_function</span><span class="special">,</span> <span class="string">"second-check-free-test-function"</span> <span class="special">)</span> <span class="special">);</span>
162 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
163 <span class="special">}</span>
167 <div class="informaltable"><table class="table">
168 <colgroup><col></colgroup>
175 <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">unit_scope</span>
176 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
177 <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"Master Test Suite"</span>
178 <span class="identifier">example</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">20</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"free_test_function"</span>
179 <span class="identifier">example</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">20</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"free_test_function"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">50u</span><span class="identifier">s</span>
180 <span class="identifier">example</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">22</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"second-check-free-test-function"</span>
181 <span class="identifier">example</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">22</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"second-check-free-test-function"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">32u</span><span class="identifier">s</span>
182 <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"Master Test Suite"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">158u</span><span class="identifier">s</span>
184 <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
189 A test case can be implemented as a method of a class. In this case a pointer
190 to the class instance has to be bound to the test method to create a test
191 case. You can use the same instance of the class for multiple test cases.
192 The <span class="emphasis"><em>Unit Test Framework</em></span> doesn't take an ownership
193 of the class instance and you are required to manage the class instance
196 <div class="warning"><table border="0" summary="Warning">
198 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
199 <th align="left">Warning</th>
201 <tr><td align="left" valign="top"><p>
202 The class instance can't be defined in the initialization function scope,
203 since it becomes invalid as soon as the test execution exits it. It needs
204 to be either defined statically/globally or managed using a shared pointer.
208 <a name="boost_test.tests_organization.test_cases.test_organization_nullary.h4"></a>
209 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_organization_nullary.example_descr1"></a></span><a class="link" href="test_organization_nullary.html#boost_test.tests_organization.test_cases.test_organization_nullary.example_descr1">Example:
210 Nullary method of a class bound to shared class instance and manually registered</a>
212 <div class="informaltable"><table class="table">
213 <colgroup><col></colgroup>
220 <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>
221 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bind</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
222 <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>
224 <span class="keyword">class</span> <span class="identifier">test_class</span>
225 <span class="special">{</span>
226 <span class="keyword">public</span><span class="special">:</span>
227 <span class="keyword">void</span> <span class="identifier">test_method1</span><span class="special">()</span>
228 <span class="special">{</span>
229 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">true</span> <span class="comment">/* test assertion */</span> <span class="special">);</span>
230 <span class="special">}</span>
231 <span class="keyword">void</span> <span class="identifier">test_method2</span><span class="special">()</span>
232 <span class="special">{</span>
233 <span class="identifier">BOOST_TEST</span><span class="special">(</span> <span class="keyword">false</span> <span class="comment">/* test assertion */</span> <span class="special">);</span>
234 <span class="special">}</span>
235 <span class="special">};</span>
237 <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>
238 <span class="special">{</span>
239 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">test_class</span><span class="special">></span> <span class="identifier">tester</span><span class="special">(</span> <span class="keyword">new</span> <span class="identifier">test_class</span> <span class="special">);</span>
241 <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span>
242 <span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_class</span><span class="special">::</span><span class="identifier">test_method1</span><span class="special">,</span> <span class="identifier">tester</span> <span class="special">)));</span>
243 <span class="identifier">framework</span><span class="special">::</span><span class="identifier">master_test_suite</span><span class="special">().</span>
244 <span class="identifier">add</span><span class="special">(</span> <span class="identifier">BOOST_TEST_CASE</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span> <span class="special">&</span><span class="identifier">test_class</span><span class="special">::</span><span class="identifier">test_method2</span><span class="special">,</span> <span class="identifier">tester</span> <span class="special">)));</span>
245 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
246 <span class="special">}</span>
250 <div class="informaltable"><table class="table">
251 <colgroup><col></colgroup>
258 <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>
259 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
260 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">22</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"boost::bind( &test_class::test_method2, tester )"</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>
262 <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">"Master Test Suite"</span>
267 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
268 <td align="left"></td>
269 <td align="right"><div class="copyright-footer">Copyright © 2001-2019 Boost.Test
271 Distributed under the Boost Software License, Version 1.0. (See accompanying
272 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>)
277 <div class="spirit-nav">
278 <a accesskey="p" href="../test_cases.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_cases.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="test_case_generation.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>