OSDN Git Service

removed unused command
[ccunit/ccunit.git] / doc / cookbook.dox
1 /* -*- Indented-Text -*- */
2 /* $Id$ */
3 /**
4 @english
5 @page cookbook CCUnit Cookbook
6 @japanese
7 @page cookbook CCUnit ¥¯¥Ã¥¯¥Ö¥Ã¥¯
8 @endif
9
10 @~english
11 Here is a short cookbook to help you get started.
12 @~japanese
13 ¤³¤ì¤Ï CCUnit ¤ò»È¤¤»Ï¤á¤ë¤Ë¤¢¤¿¤Ã¤Æ¡¢
14 Íý²ò¤Î½õ¤±¤È¤Ê¤ë¤è¤¦¤Êû¤¤¥¯¥Ã¥¯¥Ö¥Ã¥¯¤Ç¤¹¡£
15 @~
16 @english
17 [see also <a href="../ja/cookbook.html">Japanese</a> documents]
18 @japanese
19 [see also <a href="../../cookbook.html">English</a> documents]
20 @endif
21
22 @english
23 @section simple_test_case Simple Test Case
24 @japanese
25 @section simple_test_case ¥·¥ó¥×¥ë¤Ê¥Æ¥¹¥È¥±¡¼¥¹
26 @endif
27
28 @~english
29 Tests in <b>CCUnit</b> can be run automatically.  They are
30 easy to set up and once you have written them, they are
31 always there to help you keep confidence in the quality of
32 your code.
33 @~japanese
34 CCUnit¤ò»È¤Ã¤¿¥Æ¥¹¥È¤Ï¼«Æ°Åª¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
35 CCUnit ¤Î¥Æ¥¹¥È¤Ï´Êñ¤Ë¥»¥Ã¥È¥¢¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢
36 °ìÅ٥ƥ¹¥È¤ò½ñ¤¤¤Æ¤·¤Þ¤¨¤Ð¡¢
37 ¤¤¤Ä¤Ç¤â¥×¥í¥°¥é¥à¤ÎÉʼÁ¤ò¿®Íê¤Ç¤­¤ë¤â¤Î¤ËÊݤĤ³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£
38 @~
39
40 @~english
41 To make a simple test, here is what you do:
42 @~japanese
43 ñ½ã¤Ê¥Æ¥¹¥È¤òºî¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
44 @~
45
46 <ol>
47 <li> @~english Create a test function
48      @~japanese ¥Æ¥¹¥È´Ø¿ô¤òºî¤ë</li>
49 <li> @~english When you want to check a value, call
50      @~japanese Ãͤò¥Á¥§¥Ã¥¯¤·¤¿¤¤¾ì¹ç¤Ï¡¢@~
51      @link CCUNIT_ASSERT() CCUNIT_ASSERT(bool) @endlink
52      @~english and pass a bool that is true if the test succeeds
53      @~japanese ¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢
54      ¤â¤·¥Æ¥¹¥È¤¬À®¸ù¤¹¤ë¤Î¤Ç¤¢¤ì¤Ð¿¿¤òÊÖ¤¹¤è¤¦¤Ê¿¿µ¶ÃͤòÅϤ·¤Þ¤¹</li>
55 </ol>
56
57 @~english
58 For example, to test that the sum of two complex number
59 which is the sum of the values of two complex numbers,
60 write:
61 @~japanese
62 Î㤨¤Ð¡¢Æó¤Ä¤ÎÊ£ÁÇ¿ô¤Î¹ç·×¤¬¡¢
63 Æó¤Ä¤ÎÊ£ÁÇ¿ô¤ÎÃͤò²Ã»»¤·¤¿ÃͤÈƱ¤¸¤Ç¤¢¤ë¤³¤È¤ò¥Æ¥¹¥È¤¹¤ë¤È¤·¤Þ¤¹¡£
64 @~
65
66 @code
67 void test_complex_add ()
68 {
69   complex_t c10_1 = { 10.0, 1.0 };
70   complex_t c1_1 = { 1.0, 1.0 };
71   complex_t result;
72   complex_t c11_2 = { 11.0, 2.0 };
73   CCUNIT_ASSERT (complex_equals (&c11_2, complex_add (&result, c10_1, c1_1)));
74 }
75 @endcode
76
77 @~english
78 That was a very simple test. Ordinarily, you'll have many
79 little test cases that you'll want to run on the same set of
80 objects. To do this, use a fixture.
81 @~japanese
82 ¤³¤ì¤ÏÂçÊÑñ½ã¤Ê¥Æ¥¹¥È¤Ç¤¹¡£
83 Ä̾Ʊ¤¸¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ÇÁö¤é¤»¤ë¤¿¤á¤Ë¡¢
84 ¤¿¤¯¤µ¤ó¤Î¾®¤µ¤Ê¥Æ¥¹¥È¥±¡¼¥¹¤òºî¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£
85 ¤½¤¦¤¹¤ë¤Ë¤Ï¥Õ¥£¥¯¥¹¥Á¥ã¡ÊÈ÷Éʡˤò»È¤¤¤Þ¤¹¡£
86 @~
87
88 @english
89 @section fixture Fixture
90 @japanese
91 @section fixture ¥Õ¥£¥¯¥¹¥Á¥ã
92 @endif
93
94 @~english
95 What if you have two or more tests that operate on the same
96 similar set of objects?
97 @~japanese
98 ¤â¤·Æó¤Ä°Ê¾å¤Î¥Æ¥¹¥È¤¬¤¢¤ë¤Ê¤é¡¢
99 Ʊ¤¸Îà»÷¤Î¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ÇÁàºî¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡£
100 @~
101
102 @~english
103 Tests need to run against the background of a known set of
104 objects. This set of objects is called a test fixture. When
105 you are writing tests you will often find that you spend
106 more time writing the code to set up the fixture than you do
107 in actually testing values.
108 @~japanese
109 ¥Æ¥¹¥È¤Ï¼þÃΤΥǡ¼¥¿¤Î¥»¥Ã¥È¤òÇطʤˤ·¤Æ¼Â¹Ô¤µ¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
110 ¤³¤Î¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ò¥Õ¥£¥¯¥¹¥Á¥ã¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡£
111 ¥Æ¥¹¥È¤ò½ñ¤¤¤Æ¤¤¤ë¤È¡¢
112 ¼ÂºÝ¤Î¥Æ¥¹¥È¤¹¤ëÃͤò¥Õ¥£¥¯¥¹¥Á¥ã¤Ë¥»¥Ã¥È¥¢¥Ã¥×¤¹¤ë¥³¡¼¥É¤ò½ñ¤¯Êý¤Ë¡¢
113 ¤â¤Ã¤È»þ´Ö¤ò¤«¤±¤Æ¤¤¤ë¤³¤È¤Ëµ¤¤Å¤¯¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£
114 @~
115
116 @~english
117 Often, you will be able to use the same fixture for several
118 different tests. Each case will send slightly different
119 messages or parameters to the fixture and will check for
120 different results.
121 @~japanese
122 ¿¤¯¤Î¾ì¹ç¡¢¤¤¤¯¤Ä¤«¤Î°Û¤Ê¤Ã¤¿¥Æ¥¹¥È¤Î¤¿¤á¤ËƱ¤¸¥Õ¥£¥¯¥¹¥Á¥ã¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
123 ¤½¤ì¤¾¤ì¤Î¥Æ¥¹¥È¥±¡¼¥¹¤Ï¾¯¤·°Û¤Ê¤Ã¤¿¥á¥Ã¥»¡¼¥¸¡¢
124 ¤¢¤ë¤¤¤Ï¥Ñ¥é¥á¡¼¥¿¤ò¥Õ¥£¥¯¥¹¥Á¥ã¤ËÁ÷¤ê¡¢
125 °Û¤Ê¤ë·ë²Ì¤òÄ´¤Ù¤Þ¤¹¡£
126 @~
127
128 @~english
129 When you have a common fixture, here is what you do:
130 @~japanese
131 ¤â¤·¶¦Ä̤¹¤ë¥Õ¥£¥¯¥¹¥Á¥ã¤¬¤¢¤ì¤Ð¡¢¤³¤ó¤Ê¤Õ¤¦¤Ë¤¹¤ë¤³¤È¤Ë¤Ê¤ê
132 ¤Þ¤¹¡£
133 @~
134
135 <ol>
136 <li>@~english
137     Create a @link CCUnitTestCase TestCase @endlink object
138     @~japanese
139     @link CCUnitTestCase TestCase @endlink ¹½Â¤ÂΤ˥á¥â¥ê¤ò³ä¤êÅö¤Æ¤Þ¤¹
140     ¡Ê°Ê¹ß¡¢¹½Â¤ÂΤ˳ä¤êÅö¤Æ¤¿¥á¥â¥ê¤ò¡¢¥ª¥Ö¥¸¥§¥¯¥È¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡Ë
141 </li>
142 <li>@~english
143     Add an global variable for each part of the fixture
144     @~japanese
145     ¥Õ¥£¥¯¥¹¥Á¥ã¤Î¤½¤ì¤¾¤ì¤ÎÉôʬ¤ËÂç°èÊÑ¿ô¤òÄɲä·¤Þ¤¹
146 </li>
147 <li>@~english
148     Write <code>setUp()</code> function to initialize the valiables
149     @~japanese
150     <code>setUp()</code> ´Ø¿ô¤ò½ñ¤¤¤ÆÊÑ¿ô¤ò½é´ü²½¤·¤Þ¤¹
151 </li>
152 <li>@~english
153     Write <code>tearDown()</code> to release any permanent
154     resources you allocated in <code>setUp</code>
155     @~japanese
156     <code>tearDown()</code> ´Ø¿ô¤ò½ñ¤¤¤Æ<code>setUp</code>
157     ¤Ç³ä¤êÅö¤Æ¤¿±Ê³Ū¥ê¥½¡¼¥¹¤ò²òÊü¤·¤Þ¤¹
158 </li>
159 <li>@~english
160     Create a @link CCUnitTestFixture TestFixture @endlink object
161     @~japanese
162     @link CCUnitTestFixture CCUnitTestFixture @endlink
163     ¹½Â¤ÂΤ˥á¥â¥ê¤ò³ä¤êÅö¤Æ¤Þ¤¹
164 </li>
165 <li>@~english
166     Add @link GGUnitTestCase TestCase @endlink objects to fixture object
167     @~japanese
168     @link CCUnitTestCase TestCase @endlink
169     ¥ª¥Ö¥¸¥§¥¯¥È¤ò@link CCUnitTestFixture TestFixture @endlink
170     ¥Õ¥£¥¯¥¹¥Á¥ã¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤Þ¤¹¡£
171 </li>
172 </ol>
173
174 @~english
175 For example, to write several test cases, first create a
176 fixture:
177 @~japanese
178 Î㤨¤Ð¡¢¤¤¤¯¤Ä¤«¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¯¾ì¹ç¡¢
179 ºÇ½é¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤òºîÀ®¤·¤Þ¤¹¡£
180 @~
181
182 @code
183 //** TEST CASE: complex number test *\/
184
185 #include "complex.h"
186
187 static complex_t* s10_1;
188 static complex_t* s1_1;
189 static complex_t* s11_2;
190
191 void setUp_ComplexTest ()
192 {
193   s10_1 = complex_new (10, 1);
194   s1_1 = complex_new (1, 1);
195   s11_2 = complex_new (11, 2);
196 }
197
198 void tearDown_ComplexTest ()
199 {
200   complex_delete (s10_1);
201   complex_delete (s1_1);
202   complex_delete (s11_2);
203 }
204
205 ...
206
207   CCUnitTestFixture* fixture;
208   fixture = ccunit_newTestFixture ("ComplexTest",
209                                    CCUNIT_NEWTESTFUNC(setUp_ComplexTest),
210                                    CCUNIT_NEWTESTFUNC(tearDown_ComplexTest));
211 @endcode
212
213 @~english
214 Once you have the Fixture in place, you can write as complex
215 Test Cases as you'd like.
216 @~japanese
217 °ìÅÙ·è¤Þ¤Ã¤¿¤È¤³¤í¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤ò½ñ¤¤¤Æ¤·¤Þ¤¨¤Ð¡¢
218 ¤¢¤Ê¤¿¤¬¹¥¤­¤Ê¤è¤¦¤ËÊ£ÁÇ¿ô¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
219 @~
220
221 @english
222 @section test_case Test Case
223 @japanese
224 @section test_case ¥Æ¥¹¥È¥±¡¼¥¹
225 @endif
226
227 @~english
228 How do you write and invoke an individual test case when you
229 have a Fixture?
230 @~japanese
231 ¥Õ¥£¥¯¥¹¥Á¥ã¤ò°ì¤Ä½ñ¤¤¤¿¤È¤·¤Æ¡¢
232 ¤É¤¦¤ä¤Ã¤Æ¸Ä¡¹¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¤¤Æ¼Â¹Ô¤¹¤ì¤ÐÎɤ¤¤Ç¤·¤ç¤¦¤«¡£
233 @~
234
235 @~english
236 For example, to test the equality of two complex number,
237 write:
238 @~japanese
239 Î㤨¤Ð¡¢Æó¤Ä¤ÎÊ£ÁÇ¿ô¤¬Åù¤·¤¤¡Ê¤Þ¤¿¤ÏÅù¤·¤¯¤Ê¤¤¡Ë¤³¤È¤ò¥Æ¥¹¥È¤¹¤ë¤Ë¤Ï¡¢
240 ¼¡¤Î¤è¤¦¤Ë½ñ¤­¤Þ¤¹¡£
241 @~
242
243 @code
244 void test_complex_equals ()
245 {
246   CCUNIT_ASSERT_TEST_OBJ (s10_1, complex_equals, s10_1, complex_to_string);
247   CCUNIT_ASSERT_TEST_OBJ (s10_1, !complex_equals, s1_1, complex_to_string);
248 }
249
250 ...
251
252   ccunit_addNewTestCase (fixture,
253                          "test_complex_equals",
254                          "complex equals test",
255                          test_complex_equals);
256 @endcode
257
258 @~english
259 One may create and run objects for each test case like this:
260 @~japanese
261 °ì¤Ä¤Ë¤Ï¼¡¤Î¤è¤¦¤Ë¡¢
262 ¥Õ¥£¥¯¥¹¥Á¥ã¤òºîÀ®¤·¤Æ¤½¤ì¤¾¤ì¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò¼Â¹Ô¤µ¤»¤ë¤³¤È
263 ¤¬¤Ç¤­¤Þ¤¹¡£
264 @~
265
266 @code
267   CCUnitTestResult* result;
268   result = ccunit_runTestFixture (fixture);
269 @endcode
270
271 @~english
272 When the test fixture is run, that specific test functions
273 will be run.  This is not a useful thing to do, however, as
274 no diagnostics will be displayed.  One will normally use a
275 @link ExecutingTest TestRunner @endlink (see below) to
276 display the results.
277 @~japanese
278 ¥Æ¥¹¥È¥Õ¥£¥¯¥¹¥Á¥ã¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢
279 ÆÃÄê¤Î¥Æ¥¹¥È´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
280 ¤³¤ì¤Ï¤¢¤Þ¤êÊØÍø¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¢
281 ¤Ê¤¼¤Ê¤é¡¢¿ÇÃǤ¬É½¼¨¤µ¤ì¤Ê¤¤¤«¤é¤Ç¤¹¡£
282 Ä̾ï¤Ï @link ExecutingTest TestRunner @endlink
283 (@ref test_runner ¸å½Ò)
284 ¤Ç·ë²Ì¤òɽ¼¨¤·¤Þ¤¹¡£
285 @~
286
287 @~english
288 Once you have several tests, organize them into a suite.
289 @~japanese
290 °ìÅÙ¤¤¤¯¤Ä¤«¤Î¥Æ¥¹¥È¤òºî¤Ã¤¿¤é¡¢
291 ¤½¤ì¤é¤ò¥¹¥¤¡¼¥È¤ËÀ°Íý¤·¤Þ¤¹¡£
292 @~
293
294 @english
295 @section suite Suite
296 @japanese
297 @section suite ¥¹¥¤¡¼¥È
298 @endif
299
300 @~english
301 How do you set up your tests so that you can run them all at once?
302 @~japanese
303 ¤É¤Î¤è¤¦¤Ë¤·¤Æ¡¢°ìÅ٤˥ƥ¹¥È¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¡¢
304 ½àÈ÷¤·¤¿¤é¤¤¤¤¤Ç¤·¤ç¤¦¤«¡©
305 @~
306
307 @~english
308 %CCUnit provides a @link CCUnitTestSuite TestSuite @endlink
309 module that runs any number of TestCases together.
310 @~japanese
311 CCUnit ¤Ï¤¤¤¯¤Ä¤â¤Î @link CCUnitTestCase TestCases @endlink
312 ¤ò°ì½ï¤Ë¼Â¹Ô¤¹¤ë
313 @link CCUnitTestSuite TestSuite @endlink ¥â¥¸¥å¡¼¥ë¤òÄ󶡤·¤Þ¤¹¡£
314 @~
315
316 @~english
317 You saw, above, how to run test fixture.
318 @~japanese
319 ¥Æ¥¹¥È¥Õ¥£¥¯¥¹¥Á¥ã¤ò¼Â¹Ô¤¹¤ëÊýË¡¤Ï¾å½Ò¤·¤Þ¤·¤¿¡£
320 @~
321
322 @~english
323 To create a suite of two or more tests, you do the following:
324 @~japanese
325 Æó¤Ä°Ê¾å¤Î¥Æ¥¹¥È¤ò´Þ¤à°ì¤Ä¤Î¥¹¥¤¡¼¥È¤òºî¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
326 @~
327
328 @code
329 CCUnitTestSuite* suite;
330 CCUnitTestFixture* fixture;
331 CCUnitTestResult* result;
332 suite = ccunit_newTestSuite ("Complex test suite");
333 fixture = ccunit_newTestFixture ("Complex Tests",
334                                  CCUNIT_NEWTESTFUNC(setUp_complex_test),
335                                  CCUNIT_NEWTESTFUNC(tearDown_complex_test));
336 ccunit_addNewTestCase (fixture, "test_complex_equals", "complex equals test",
337                        test_complex_equals);
338 ccunit_addNewTestCase (fixture, "test_complex_add", "complex add test",
339                        test_complex_add);
340 ccunit_addNewTestCase (fixture, "test_complex_sub", "complex sub test",
341                        test_complex_sub);
342 ccunit_addTestFixture (suite, fixtuer);
343 result = ccunit_runTestSuite (suite, NULL);
344 @endcode
345
346 @~english
347 @link CCUnitTestSuite TestSuites @endlink don't only have to
348 contain @link CCUnitTestFixture TestFixtures @endlink.  They
349 can contain any object that implements the @link CCUnitTest
350 Test @endlink interface.  For example, you can create a
351 @link CCUnitTestSuite TestSuite @endlink in your code and I
352 can create one in mine, and we can run them together by
353 creating a @link CCUnitTestSuite TestSuite @endlink that
354 contains both:
355 @~japanese
356 @link CCUnitTestSuite TestSuites @endlink ¤Ï
357 @link CCUnitTestFixture TestFixtures @endlink
358 ¤ò´Þ¤à¤À¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
359 ¤½¤ì¤é¤Ï @link CCUnitTest Test @endlink
360 ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤É¤ó¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤â´Þ¤á¤é¤ì¤Þ¤¹¡£
361 Î㤨¤Ð¡¢¤¢¤Ê¤¿¤Ï¤¢¤Ê¤¿¤Î¥³¡¼¥É¤Ë@link CCUnitTestSuite TestSuite @endlink
362 ¤òºî¤ë¤³¤È¤¬¤Ç¤­¡¢¤½¤·¤Æ»ä¤Ï»ä¤Î¥¹¥¤¡¼¥È¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¢
363 ¤½¤·¤Æ»äã¤ÏξÊý¤È¤â¤ò´Þ¤ó¤Ç¤¤¤ë @link CCUnitTestSuite TestSuite @endlink
364 ¤òºî¤Ã¤Æ°ì½ï¤Ë¸Ä¡¹¤Î¥¹¥¤¡¼¥È¤òÆ°¤«¤¹¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¤¹¡£
365 @~
366
367 @code
368 CCUnitTestSuite* suite;
369 CCUnitTestResult* result;
370 suite = ccunit_newTestSuite ("suite");
371 ccunit_addTestSuite (suite, complex_add_sub_suite ());
372 ccunit_addTestSuite (suite, complex_mul_div_suite ());
373 result = ccunit_runTestSuite(suite, NULL);
374 @endcode
375
376
377 @english
378 @section test_runner TestRunner
379 @japanese
380 @section test_runner ¥Æ¥¹¥È¥é¥ó¥Ê¡¼
381 @endif
382
383 @~english
384 How do you run your tests and collect their results?
385 @~japanese
386 ¤É¤¦¤ä¤Ã¤Æ¥Æ¥¹¥È¤ò¼Â¹Ô¤·¡¢¤½¤Î·ë²Ì¤ò½¸¤á¤¿¤éÎɤ¤¤Ç¤·¤ç¤¦¤«¡£
387 @~
388
389 @~english
390 Once you have a test suite, you'll want to run it. %CCUnit
391 provides tools to define the suite to be run and to display
392 its results.  You make your suite accessible to a @link
393 CreatingTestSuite ccunit_makeSuite @endlink tool that generate a
394 creating test suite code.
395 @~japanese
396 °ì¤Ä¥Æ¥¹¥È¥¹¥¤¡¼¥È¤ò½ñ¤¤¤¿¤é¡¢
397 ¤½¤ì¤ò¼Â¹Ô¤·¤¿¤¤¤Ç¤·¤ç¤¦¡£
398 CCUnit ¤Ï¥¹¥¤¡¼¥È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ËÄêµÁ¤·¡¢
399 ·ë²Ì¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥Ä¡¼¥ë¤òÄ󶡤·¤Þ¤¹¡£
400 ¥¹¡¼¥Ä¤ò@link CreatingTestSuite ccunit_makeSuite @endlink
401 ¥Ä¡¼¥ë¤ËÆþÎϤǤ­¤ë¤è¤¦¤Ê·Á¼°¤Ç½ñ¤¯¤³¤È¤Ç¡¢
402 ¥Æ¥¹¥È¥¹¡¼¥Ä¤òºîÀ®¤¹¤ë¥³¡¼¥É¤ò¼«Æ°Åª¤ËÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
403 @~
404
405 @~english
406 For example, to make a ComplexTest suite available to a
407 @link CreatingTestSuite ccunit_makeSuite @endlink,
408 excute the following tool to
409 ComplexTest.c:
410 @~japanese
411 Î㤨¤Ð¡¢ComplexTest ¥¹¥¤¡¼¥È¤ò
412 @link CreatingTestSuite ccunit_makeSuite @endlink
413 ¤ò»È¤Ã¤Æ»ÈÍѤǤ­¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
414 °Ê²¼¤Î¥Ä¡¼¥ë¤ò ComplexTest.c ¤Ë¼Â¹Ô¤·¤Þ¤¹¡£
415 @~
416
417 @code
418 $ ccunit_makeSuite -f complex_suite -o suiteComplex.c ComplexTest.c
419 @endcode
420
421 @anchor test_runner_code
422 @~english
423 To use the TestRunner, include the header files for the tests in Main.c:
424 @~japanese
425 TestRunner ¤ò»ÈÍѤ¹¤ë¤Ë¤Ï¡¢
426 Main.c¤Ç¥Æ¥¹¥È¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¤Î¥Ø¥Ã¥À¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Þ¤¹¡£
427 @~
428
429 @code
430 #include <ccunit/CCUnitTestRunner.h>
431 #include <ccunit/CCUnitTestSuite.h>
432 @endcode
433
434 @~english
435 And call to
436 @link ccunit_runTestRunner()
437 ccunit_runTestRunner (CCUnitTestRunner*, CCUnitTestSuite *) @endlink
438 in the <code>main()</code> function:
439 @~japanese
440 ¤½¤·¤Æ@link ccunit_runTestRunner()
441 ccunit_runTestRunner (CCUnitTestRunner*, CCUnitTestSuite *) @endlink
442 ¤ò<code>main()</code>´Ø¿ô¤Ç¼Â¹Ô¤·¤Þ¤¹¡£
443 @~
444
445 @code
446 extern CCUnitTestSuite* complex_suite(const char* name);
447
448 int main( int argc, char **argv)
449 {
450   CCUnitTestRunner* runner;
451   CCUnitTestSuite* suite;
452   runner = ccunit_newTestRunner (stdout);
453   suite = complex_suite ("complex test suite");
454   return ccunit_runTestRunner (runner, suite);
455 }
456 @endcode
457
458 @~english
459 The @link ExecutingTest TestRunner @endlink will run the tests.
460 If all the tests pass, you'll get an informative message.
461 If any fail, you'll get the following information:
462 @~japanese
463 @link ExecutingTest TestRunner @endlink ¤Ï¥Æ¥¹¥È¤ò¼Â¹Ô¤·¤Þ¤¹¡£
464 ¤â¤·¤¹¤Ù¤Æ¤Î¥Æ¥¹¥È¤¬¥Ñ¥¹¤¹¤ì¤Ð¡¢¤½¤Î¾ðÊó¤Î¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
465 ¤â¤·¤É¤ì¤«¤¬¼ºÇÔ¤¹¤ì¤Ð¡¢¤½¤ì¤Ë¤Ä¤¤¤Æ°Ê²¼¤Î¤è¤¦¤Ê¾ðÊó¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
466 @~
467
468 <ul>
469 <li>@~english
470     The name of the source file that contains the test
471     @~japanese
472     ¥Æ¥¹¥È¤ò´Þ¤ó¤Ç¤¤¤ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë̾
473 </li>
474 <li>@~english
475     The line number where the failure occurred
476     @~japanese
477     ¼ºÇÔ¤¬Åܤ俹ÔÈÖ¹æ
478 </li>
479 <li>@~english
480     The name of the test case that failed
481     @~japanese
482     ¼ºÇÔ¤·¤¿¥Æ¥¹¥È¥±¡¼¥¹¤Î̾Á°
483 </li>
484 <li>@~english
485     All of the text inside the call to
486     <code>CCUNIT_ASSERT ()</code> which detected the failure
487     @~japanese
488     ¼ºÇÔ¤ò¸¡ÃΤ·¤¿<code>CCUNIT_ASSERT ()</code>¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿»þ¤Î¾ò·ï¤Îʸ»úÎó¡£
489 </li>
490 </ul>
491
492 @english
493 @section helper_macros Helper Tool
494 @japanese
495 @section helper_macros ¥Ø¥ë¥Ñ¡¼¥Ä¡¼¥ë
496 @endif
497
498 @~english
499 As you might have noticed, implementing the <code>suite
500 ()</code> function of fixture is a repetitive and error
501 prone task. A @ref CreatingTestSuite set of functions and
502 command have been created to automatically implements the
503 <code>suite()</code> function.
504 @~japanese
505 ¤ªµ¤¤Å¤­¤Î¤è¤¦¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤Î <code>suite ()</code>´Ø¿ô¤ò¼ÂÁõ¤¹¤ë¤Î¤Ï¡¢
506 È¿ÉüŪ¤Ç´Ö°ã¤¤¤ä¤¹¤¤ºî¶È¤Ç¤¹¡£
507 @ref CreatingTestSuite ¤Î´Ø¿ô¤Î¥»¥Ã¥È¤È¥³¥Þ¥ó¥É¤Ï<code>suite ()</code>
508 ´Ø¿ô¤Î¼ÂÁõ¤ò¼«Æ°Åª¤ËºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
509 @~
510
511 @dontinclude complex/testComplex.c
512
513 @~english
514 The following code is a rewrite of ComplexTest using those command:
515 @~japanese
516 °Ê²¼¤Î¥³¡¼¥É¤Ï¤½¤ì¤é¤Î¥³¥Þ¥ó¥É¤¬»È¤¦¤è¤¦¤ËComplexTest¤ò½ñ´¹¤¨¤¿¤â¤Î¤Ç¤¹¡£
517 @~
518
519 @code
520 #include <cppunit/CCUnitAssert.h>
521 @endcode
522
523 @~english
524 First, you declare the fixture, passing the test fixture
525 name to the javaDoc style comment, which consist of a
526 C-style comment block starting with two <tt>*</tt>'s:
527 @~japanese
528 ºÇ½é¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤òÀë¸À¤·¤Þ¤¹¡£
529 ¤³¤ì¤ÏjavaDoc¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥ÈÆâ¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤Î̾Á°¤òµ­½Ò¤·¤Þ¤¹¡£
530 javaDoc¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤È¤Ï C ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¥Ö¥í¥Ã¥¯¤Î³«»Ï¤¬
531 Æó¤Ä¤Î¥¢¥¹¥¿¥ê¥¹¥¯<tt>*</tt>¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£
532 @~
533
534 @code
535 //** test case: complex number test *\/
536 @endcode
537
538 @~english
539 The function to make @link CCUnitTestSuite TestSuite
540 @endlink is <code>ccunit_suite</code>.
541 But, it can be changed to another
542 name by the <code>-f</code> option of the
543 <code>ccunit_makeSuite</code> command, too.
544 Then, you define each test case of the fixture with prefix
545 <code>test</code>, <code>setUp</code>,
546 <code>tearDown</code>:
547
548 @~japanese
549 @link CCUnitTestSuite TestSuite @endlink
550 ¤òºîÀ®¤¹¤ë´Ø¿ô¤Ï <code>ccunit_suite</code> ¤Ç¤¹¡¢
551 ¤·¤«¤· <code>ccunit_makeSuite</code> ¥³¥Þ¥ó¥É¤Î
552 <code>-f</code> ¥ª¥×¥·¥ç¥ó¤ÇÊ̤Î̾Á°¤ËÊѤ¨¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
553 ¤½¤·¤Æ¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤Î¥Æ¥¹¥È¥±¡¼¥¹¤Ë¤Ï¤½¤ì¤¾¤ì̾Á°¤ÎÀèƬ¤Ë¡¢
554 <code>test</code>, <code>setUp</code>,
555 <code>tearDown</code> ¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£
556 @~
557
558 @code
559 #include <complex.h>
560
561 static complex_t* s10_1;
562 static complex_t* s1_1;
563 static complex_t* s11_2;
564
565 void setUp_complex_test ()
566 {
567   s10_1 = complex_new (10, 1);
568   s1_1 = complex_new (1, 1);
569   s11_2 = complex_new (11, 2);
570 }
571
572 void tearDown_complex_test ()
573 {
574   complex_delete (s10_1);
575   complex_delete (s1_1);
576   complex_delete (s11_2);
577 }
578
579 //** test equals *\/
580 void test_complex_equals ()
581 {
582   CCUNIT_ASSERT_TEST_OBJ (s10_1, complex_equals, s10_1, complex_to_string);
583   CCUNIT_ASSERT_TEST_OBJ (s10_1, !complex_equals, s1_1, complex_to_string);
584 }
585
586 //** test add *\/
587 void test_complex_add ()
588 {
589   complex_t c10_1 = { 10.0, 1.0 };
590   complex_t c1_1 = { 1.0, 1.0 };
591   complex_t result;
592   complex_t c11_2 = { 11.0, 2.0 };
593   CCUNIT_ASSERT (complex_equals (&c11_2, complex_add (&result, &c10_1, &c1_1)));
594 }
595
596 //** test sub *\/
597 void test_complex_sub ()
598 {
599   complex_t c9_0 = { 9, 0 };
600   complex_t result;
601   CCUNIT_ASSERT_TEST_OBJ (&c9_0, complex_equals,
602                           complex_sub (&result, s10_1, s1_1),
603                           complex_to_string);
604 }
605 @endcode
606
607 @~english
608 Finally, you end the fixture declaration:
609 @~japanese
610 ºÇ¸å¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤Î½ª¤ê¤òÀë¸À¤·¤Þ¤¹¡£
611 @~
612
613 @code
614 //** end test case *\/
615 @endcode
616
617 @~english
618 To generate creating suite function code, run
619 <code>ccunit_makeSuite</code> tool.
620 @~japanese
621 ¥¹¥¤¡¼¥ÈºîÀ®´Ø¿ô¤Î¥³¡¼¥É¤òÀ¸À®¤¹¤ë¤Ë¤Ï¡¢
622 <code>ccunit_makeSuite</code>¥Ä¡¼¥ë¤ò¼Â¹Ô¤·¤Þ¤¹¡£
623 @~
624
625 @code
626 $ ccunit_makeSuite -f complex_suite -o suiteComplex.c testComplex.c
627 $ cat suiteComplex.c
628
629 #include <ccunit/CCUnitTestSuite.h>
630 #include <ccunit/CCUnitTestFixture.h>
631 #include <ccunit/CCUnitTestCase.h>
632
633 //* test fixture: complex number test *\/
634 //* setUp_complex_test *\/
635 extern void setUp_complex_test ();
636 //* tearDown_complex_test *\/
637 extern void tearDown_complex_test ();
638 //* test_complex_equals *\/
639 extern void test_complex_equals ();
640 //* test_complex_add *\/
641 extern void test_complex_add ();
642 //* test_complex_sub *\/
643 extern void test_complex_sub ();
644
645 static CCUnitTestFunc fx_001_cases[] = {
646   {
647     "test_complex_equals",
648     "test equals",
649     test_complex_equals
650   },
651   {
652     "test_complex_add",
653     "test add",
654     test_complex_add
655   },
656   {
657     "test_complex_sub",
658     "test sub",
659     test_complex_sub
660   },
661   {
662     NULL, NULL, NULL
663   },
664 };
665
666 static CCUnitTestFixtureDfn fx_001 = {
667   { ccunitTypeFixture },
668   "complex number test",
669   {
670     "setUp_complex_test",
671     "setUp_complex_test",
672     setUp_complex_test
673   },
674   {
675     "tearDown_complex_test",
676     "tearDown_complex_test",
677     tearDown_complex_test
678   },
679   fx_001_cases,
680 };
681
682 static CCUnitTestDfn* suite_001_test[] = {
683     &fx_001.test,
684     NULL,
685 };
686
687 static CCUnitTestSuiteDfn suite_001 = {
688   { ccunitTypeSuite },
689   "",
690   suite_001_test
691 };
692
693
694 CCUnitTestSuite* complex_suite (const char* name)
695 {
696   if (!suite_001.name[0])
697     suite_001.name = name;
698   return ccunit_newTestSuiteFromDfn (&suite_001);
699 }
700 $
701 @endcode
702
703 @english
704 @section post_build_check Post-build check
705 @japanese
706 @section post_build_check ¥Ó¥ë¥É¸å¤Î¥Á¥§¥Ã¥¯
707 @endif
708
709 @~english
710 Now that we have our unit tests running, how about
711 integrating unit testing to our build process ?
712 @~japanese
713 ¤µ¤¢¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¤ò¼Â¹Ô¤¹¤ë½àÈ÷¤¬¤Ç¤­¤Þ¤·¤¿¡£
714 ¤Ç¤Ï¥Ó¥ë¥É¥×¥í¥»¥¹¤Ë¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¤òÅý¹ç¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤¿¤é¤¤
715 ¤¤¤Ç¤·¤ç¤¦¡£
716 @~
717
718 @~english
719 To do that, the application must returns a value different than 0 to indicate that
720 there was an error.
721 @~japanese
722 ¤½¤¦¤¹¤ë¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤³¤È¤ò¼¨¤¹
723 £°°Ê³°¤ÎÃͤòÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
724 @~
725
726 @~english
727 @link ccunit_runTestRunner() ccunit_runTestRunner() @endlink returns
728 a integer indicating if the run was successful.
729 @~japanese
730 @link ccunit_runTestRunner() ccunit_runTestRunner() @endlink
731 ¤Ï¡¢¼Â¹Ô¤¬À®¸ù¤·¤¿¤«¤É¤¦¤«¤ò¼¨¤¹À°¿ô¤òÊÖ¤·¤Þ¤¹¡£
732 @~
733
734 @~english
735 Updating our main programm, we obtains:
736 @~japanese
737 ¼¡¤Î¤è¤¦¤Ë¥á¥¤¥ó¥×¥í¥°¥é¥à¤ò¹¹¿·¤·¤Þ¤¹¡£
738 @~
739
740 @code
741 #include <ccunit/CCUnitTestRunner.h>
742
743 int main (int argc, char** argv)
744 {
745   CCUnitTestRunner* runner;
746   CCUnitTestSuite* suite;
747   int wasSucessful;
748   runner = ccunit_newTestRunner (stdout);
749   suite = ccunit_suite ();
750   wasSucessful = ccunit_runTestRunner (runner, suite);
751   return wasSucessful;
752 }
753 @endcode
754
755 @~english
756 Now, you need to run your application after compilation.
757 The sample program made in the above is in the examples/complex directory.
758 @~japanese
759 ¤½¤ì¤Ç¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¸å¤Ë¼Â¹Ô¤·¤Æ¤ß¤Þ¤·¤ç
760 ¤¦¡£
761 °Ê¾å¤ÇºîÀ®¤·¤¿¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Ï examples/complex ¥Ç¥£¥ì¥¯
762 ¥È¥ê¤Ë¤¢¤ê¤Þ¤¹¡£
763 @~
764
765 */