1 /* -*- Indented-Text -*- */
5 @page cookbook CCUnit Cookbook
7 @page cookbook CCUnit ¥¯¥Ã¥¯¥Ö¥Ã¥¯
11 Here is a short cookbook to help you get started.
13 ¤³¤ì¤Ï CCUnit ¤ò»È¤¤»Ï¤á¤ë¤Ë¤¢¤¿¤Ã¤Æ¡¢
14 Íý²ò¤Î½õ¤±¤È¤Ê¤ë¤è¤¦¤Êû¤¤¥¯¥Ã¥¯¥Ö¥Ã¥¯¤Ç¤¹¡£
17 [see also <a href="../ja/cookbook.html">Japanese</a> documents]
19 [see also <a href="../../cookbook.html">English</a> documents]
23 @section simple_test_case Simple Test Case
25 @section simple_test_case ¥·¥ó¥×¥ë¤Ê¥Æ¥¹¥È¥±¡¼¥¹
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
34 CCUnit¤ò»È¤Ã¤¿¥Æ¥¹¥È¤Ï¼«Æ°Åª¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
35 CCUnit ¤Î¥Æ¥¹¥È¤Ï´Êñ¤Ë¥»¥Ã¥È¥¢¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¡¢
36 °ìÅ٥ƥ¹¥È¤ò½ñ¤¤¤Æ¤·¤Þ¤¨¤Ð¡¢
37 ¤¤¤Ä¤Ç¤â¥×¥í¥°¥é¥à¤ÎÉʼÁ¤ò¿®Íê¤Ç¤¤ë¤â¤Î¤ËÊݤĤ³¤È¤¬¤Ç¤¤ë¤Ç¤·¤ç¤¦¡£
41 To make a simple test, here is what you do:
43 ñ½ã¤Ê¥Æ¥¹¥È¤òºî¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
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>
58 For example, to test that the sum of two complex number
59 which is the sum of the values of two complex numbers,
62 Î㤨¤Ð¡¢Æó¤Ä¤ÎÊ£ÁÇ¿ô¤Î¹ç·×¤¬¡¢
63 Æó¤Ä¤ÎÊ£ÁÇ¿ô¤ÎÃͤò²Ã»»¤·¤¿ÃͤÈƱ¤¸¤Ç¤¢¤ë¤³¤È¤ò¥Æ¥¹¥È¤¹¤ë¤È¤·¤Þ¤¹¡£
67 void test_complex_add ()
69 complex_t c10_1 = { 10.0, 1.0 };
70 complex_t c1_1 = { 1.0, 1.0 };
72 complex_t c11_2 = { 11.0, 2.0 };
73 CCUNIT_ASSERT (complex_equals (&c11_2, complex_add (&result, c10_1, c1_1)));
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.
82 ¤³¤ì¤ÏÂçÊÑñ½ã¤Ê¥Æ¥¹¥È¤Ç¤¹¡£
83 Ä̾Ʊ¤¸¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ÇÁö¤é¤»¤ë¤¿¤á¤Ë¡¢
84 ¤¿¤¯¤µ¤ó¤Î¾®¤µ¤Ê¥Æ¥¹¥È¥±¡¼¥¹¤òºî¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£
85 ¤½¤¦¤¹¤ë¤Ë¤Ï¥Õ¥£¥¯¥¹¥Á¥ã¡ÊÈ÷Éʡˤò»È¤¤¤Þ¤¹¡£
89 @section fixture Fixture
91 @section fixture ¥Õ¥£¥¯¥¹¥Á¥ã
95 What if you have two or more tests that operate on the same
96 similar set of objects?
98 ¤â¤·Æó¤Ä°Ê¾å¤Î¥Æ¥¹¥È¤¬¤¢¤ë¤Ê¤é¡¢
99 Ʊ¤¸Îà»÷¤Î¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ÇÁàºî¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡£
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.
109 ¥Æ¥¹¥È¤Ï¼þÃΤΥǡ¼¥¿¤Î¥»¥Ã¥È¤òÇطʤˤ·¤Æ¼Â¹Ô¤µ¤ì¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
110 ¤³¤Î¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤ò¥Õ¥£¥¯¥¹¥Á¥ã¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡£
111 ¥Æ¥¹¥È¤ò½ñ¤¤¤Æ¤¤¤ë¤È¡¢
112 ¼ÂºÝ¤Î¥Æ¥¹¥È¤¹¤ëÃͤò¥Õ¥£¥¯¥¹¥Á¥ã¤Ë¥»¥Ã¥È¥¢¥Ã¥×¤¹¤ë¥³¡¼¥É¤ò½ñ¤¯Êý¤Ë¡¢
113 ¤â¤Ã¤È»þ´Ö¤ò¤«¤±¤Æ¤¤¤ë¤³¤È¤Ëµ¤¤Å¤¯¤³¤È¤¬¤è¤¯¤¢¤ê¤Þ¤¹¡£
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
122 ¿¤¯¤Î¾ì¹ç¡¢¤¤¤¯¤Ä¤«¤Î°Û¤Ê¤Ã¤¿¥Æ¥¹¥È¤Î¤¿¤á¤ËƱ¤¸¥Õ¥£¥¯¥¹¥Á¥ã¤ò»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
123 ¤½¤ì¤¾¤ì¤Î¥Æ¥¹¥È¥±¡¼¥¹¤Ï¾¯¤·°Û¤Ê¤Ã¤¿¥á¥Ã¥»¡¼¥¸¡¢
124 ¤¢¤ë¤¤¤Ï¥Ñ¥é¥á¡¼¥¿¤ò¥Õ¥£¥¯¥¹¥Á¥ã¤ËÁ÷¤ê¡¢
125 °Û¤Ê¤ë·ë²Ì¤òÄ´¤Ù¤Þ¤¹¡£
129 When you have a common fixture, here is what you do:
131 ¤â¤·¶¦Ä̤¹¤ë¥Õ¥£¥¯¥¹¥Á¥ã¤¬¤¢¤ì¤Ð¡¢¤³¤ó¤Ê¤Õ¤¦¤Ë¤¹¤ë¤³¤È¤Ë¤Ê¤ê
137 Create a @link CCUnitTestCase TestCase @endlink object
139 @link CCUnitTestCase TestCase @endlink ¹½Â¤ÂΤ˥á¥â¥ê¤ò³ä¤êÅö¤Æ¤Þ¤¹
140 ¡Ê°Ê¹ß¡¢¹½Â¤ÂΤ˳ä¤êÅö¤Æ¤¿¥á¥â¥ê¤ò¡¢¥ª¥Ö¥¸¥§¥¯¥È¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡Ë
143 Add an global variable for each part of the fixture
145 ¥Õ¥£¥¯¥¹¥Á¥ã¤Î¤½¤ì¤¾¤ì¤ÎÉôʬ¤ËÂç°èÊÑ¿ô¤òÄɲä·¤Þ¤¹
148 Write <code>setUp()</code> function to initialize the valiables
150 <code>setUp()</code> ´Ø¿ô¤ò½ñ¤¤¤ÆÊÑ¿ô¤ò½é´ü²½¤·¤Þ¤¹
153 Write <code>tearDown()</code> to release any permanent
154 resources you allocated in <code>setUp</code>
156 <code>tearDown()</code> ´Ø¿ô¤ò½ñ¤¤¤Æ<code>setUp</code>
157 ¤Ç³ä¤êÅö¤Æ¤¿±Ê³Ū¥ê¥½¡¼¥¹¤ò²òÊü¤·¤Þ¤¹
160 Create a @link CCUnitTestFixture TestFixture @endlink object
162 @link CCUnitTestFixture CCUnitTestFixture @endlink
163 ¹½Â¤ÂΤ˥á¥â¥ê¤ò³ä¤êÅö¤Æ¤Þ¤¹
166 Add @link GGUnitTestCase TestCase @endlink objects to fixture object
168 @link CCUnitTestCase TestCase @endlink
169 ¥ª¥Ö¥¸¥§¥¯¥È¤ò@link CCUnitTestFixture TestFixture @endlink
170 ¥Õ¥£¥¯¥¹¥Á¥ã¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤Þ¤¹¡£
175 For example, to write several test cases, first create a
178 Î㤨¤Ð¡¢¤¤¤¯¤Ä¤«¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¯¾ì¹ç¡¢
179 ºÇ½é¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤òºîÀ®¤·¤Þ¤¹¡£
183 //** TEST CASE: complex number test *\/
187 static complex_t* s10_1;
188 static complex_t* s1_1;
189 static complex_t* s11_2;
191 void setUp_ComplexTest ()
193 s10_1 = complex_new (10, 1);
194 s1_1 = complex_new (1, 1);
195 s11_2 = complex_new (11, 2);
198 void tearDown_ComplexTest ()
200 complex_delete (s10_1);
201 complex_delete (s1_1);
202 complex_delete (s11_2);
207 CCUnitTestFixture* fixture;
208 fixture = ccunit_newTestFixture ("ComplexTest",
209 CCUNIT_NEWTESTFUNC(setUp_ComplexTest),
210 CCUNIT_NEWTESTFUNC(tearDown_ComplexTest));
214 Once you have the Fixture in place, you can write as complex
215 Test Cases as you'd like.
217 °ìÅÙ·è¤Þ¤Ã¤¿¤È¤³¤í¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤ò½ñ¤¤¤Æ¤·¤Þ¤¨¤Ð¡¢
218 ¤¢¤Ê¤¿¤¬¹¥¤¤Ê¤è¤¦¤ËÊ£ÁÇ¿ô¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¯¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
222 @section test_case Test Case
224 @section test_case ¥Æ¥¹¥È¥±¡¼¥¹
228 How do you write and invoke an individual test case when you
231 ¥Õ¥£¥¯¥¹¥Á¥ã¤ò°ì¤Ä½ñ¤¤¤¿¤È¤·¤Æ¡¢
232 ¤É¤¦¤ä¤Ã¤Æ¸Ä¡¹¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò½ñ¤¤¤Æ¼Â¹Ô¤¹¤ì¤ÐÎɤ¤¤Ç¤·¤ç¤¦¤«¡£
236 For example, to test the equality of two complex number,
239 Î㤨¤Ð¡¢Æó¤Ä¤ÎÊ£ÁÇ¿ô¤¬Åù¤·¤¤¡Ê¤Þ¤¿¤ÏÅù¤·¤¯¤Ê¤¤¡Ë¤³¤È¤ò¥Æ¥¹¥È¤¹¤ë¤Ë¤Ï¡¢
244 void test_complex_equals ()
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);
252 ccunit_addNewTestCase (fixture,
253 "test_complex_equals",
254 "complex equals test",
255 test_complex_equals);
259 One may create and run objects for each test case like this:
262 ¥Õ¥£¥¯¥¹¥Á¥ã¤òºîÀ®¤·¤Æ¤½¤ì¤¾¤ì¤Î¥Æ¥¹¥È¥±¡¼¥¹¤ò¼Â¹Ô¤µ¤»¤ë¤³¤È
267 CCUnitTestResult* result;
268 result = ccunit_runTestFixture (fixture);
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
278 ¥Æ¥¹¥È¥Õ¥£¥¯¥¹¥Á¥ã¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢
279 ÆÃÄê¤Î¥Æ¥¹¥È´Ø¿ô¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
280 ¤³¤ì¤Ï¤¢¤Þ¤êÊØÍø¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¢
281 ¤Ê¤¼¤Ê¤é¡¢¿ÇÃǤ¬É½¼¨¤µ¤ì¤Ê¤¤¤«¤é¤Ç¤¹¡£
282 Ä̾ï¤Ï @link ExecutingTest TestRunner @endlink
283 (@ref test_runner ¸å½Ò)
288 Once you have several tests, organize them into a suite.
290 °ìÅÙ¤¤¤¯¤Ä¤«¤Î¥Æ¥¹¥È¤òºî¤Ã¤¿¤é¡¢
291 ¤½¤ì¤é¤ò¥¹¥¤¡¼¥È¤ËÀ°Íý¤·¤Þ¤¹¡£
297 @section suite ¥¹¥¤¡¼¥È
301 How do you set up your tests so that you can run them all at once?
303 ¤É¤Î¤è¤¦¤Ë¤·¤Æ¡¢°ìÅ٤˥ƥ¹¥È¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¡¢
304 ½àÈ÷¤·¤¿¤é¤¤¤¤¤Ç¤·¤ç¤¦¤«¡©
308 %CCUnit provides a @link CCUnitTestSuite TestSuite @endlink
309 module that runs any number of TestCases together.
311 CCUnit ¤Ï¤¤¤¯¤Ä¤â¤Î @link CCUnitTestCase TestCases @endlink
313 @link CCUnitTestSuite TestSuite @endlink ¥â¥¸¥å¡¼¥ë¤òÄ󶡤·¤Þ¤¹¡£
317 You saw, above, how to run test fixture.
319 ¥Æ¥¹¥È¥Õ¥£¥¯¥¹¥Á¥ã¤ò¼Â¹Ô¤¹¤ëÊýË¡¤Ï¾å½Ò¤·¤Þ¤·¤¿¡£
323 To create a suite of two or more tests, you do the following:
325 Æó¤Ä°Ê¾å¤Î¥Æ¥¹¥È¤ò´Þ¤à°ì¤Ä¤Î¥¹¥¤¡¼¥È¤òºî¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
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",
340 ccunit_addNewTestCase (fixture, "test_complex_sub", "complex sub test",
342 ccunit_addTestFixture (suite, fixtuer);
343 result = ccunit_runTestSuite (suite, NULL);
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
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 ¤òºî¤Ã¤Æ°ì½ï¤Ë¸Ä¡¹¤Î¥¹¥¤¡¼¥È¤òÆ°¤«¤¹¤³¤È¤¬¤Ç¤¤ë¤Î¤Ç¤¹¡£
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);
378 @section test_runner TestRunner
380 @section test_runner ¥Æ¥¹¥È¥é¥ó¥Ê¡¼
384 How do you run your tests and collect their results?
386 ¤É¤¦¤ä¤Ã¤Æ¥Æ¥¹¥È¤ò¼Â¹Ô¤·¡¢¤½¤Î·ë²Ì¤ò½¸¤á¤¿¤éÎɤ¤¤Ç¤·¤ç¤¦¤«¡£
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.
396 °ì¤Ä¥Æ¥¹¥È¥¹¥¤¡¼¥È¤ò½ñ¤¤¤¿¤é¡¢
397 ¤½¤ì¤ò¼Â¹Ô¤·¤¿¤¤¤Ç¤·¤ç¤¦¡£
398 CCUnit ¤Ï¥¹¥¤¡¼¥È¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ËÄêµÁ¤·¡¢
399 ·ë²Ì¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥Ä¡¼¥ë¤òÄ󶡤·¤Þ¤¹¡£
400 ¥¹¡¼¥Ä¤ò@link CreatingTestSuite ccunit_makeSuite @endlink
401 ¥Ä¡¼¥ë¤ËÆþÎϤǤ¤ë¤è¤¦¤Ê·Á¼°¤Ç½ñ¤¯¤³¤È¤Ç¡¢
402 ¥Æ¥¹¥È¥¹¡¼¥Ä¤òºîÀ®¤¹¤ë¥³¡¼¥É¤ò¼«Æ°Åª¤ËÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
406 For example, to make a ComplexTest suite available to a
407 @link CreatingTestSuite ccunit_makeSuite @endlink,
408 excute the following tool to
411 Î㤨¤Ð¡¢ComplexTest ¥¹¥¤¡¼¥È¤ò
412 @link CreatingTestSuite ccunit_makeSuite @endlink
413 ¤ò»È¤Ã¤Æ»ÈÍѤǤ¤ë¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¡¢
414 °Ê²¼¤Î¥Ä¡¼¥ë¤ò ComplexTest.c ¤Ë¼Â¹Ô¤·¤Þ¤¹¡£
418 $ ccunit_makeSuite -f complex_suite -o suiteComplex.c ComplexTest.c
421 @anchor test_runner_code
423 To use the TestRunner, include the header files for the tests in Main.c:
425 TestRunner ¤ò»ÈÍѤ¹¤ë¤Ë¤Ï¡¢
426 Main.c¤Ç¥Æ¥¹¥È¤Î¤¿¤á¤Î¥Õ¥¡¥¤¥ë¤Î¥Ø¥Ã¥À¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Þ¤¹¡£
430 #include <ccunit/CCUnitTestRunner.h>
431 #include <ccunit/CCUnitTestSuite.h>
436 @link ccunit_runTestRunner()
437 ccunit_runTestRunner (CCUnitTestRunner*, CCUnitTestSuite *) @endlink
438 in the <code>main()</code> function:
440 ¤½¤·¤Æ@link ccunit_runTestRunner()
441 ccunit_runTestRunner (CCUnitTestRunner*, CCUnitTestSuite *) @endlink
442 ¤ò<code>main()</code>´Ø¿ô¤Ç¼Â¹Ô¤·¤Þ¤¹¡£
446 extern CCUnitTestSuite* complex_suite(const char* name);
448 int main( int argc, char **argv)
450 CCUnitTestRunner* runner;
451 CCUnitTestSuite* suite;
452 runner = ccunit_newTestRunner (stdout);
453 suite = complex_suite ("complex test suite");
454 return ccunit_runTestRunner (runner, suite);
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:
463 @link ExecutingTest TestRunner @endlink ¤Ï¥Æ¥¹¥È¤ò¼Â¹Ô¤·¤Þ¤¹¡£
464 ¤â¤·¤¹¤Ù¤Æ¤Î¥Æ¥¹¥È¤¬¥Ñ¥¹¤¹¤ì¤Ð¡¢¤½¤Î¾ðÊó¤Î¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
465 ¤â¤·¤É¤ì¤«¤¬¼ºÇÔ¤¹¤ì¤Ð¡¢¤½¤ì¤Ë¤Ä¤¤¤Æ°Ê²¼¤Î¤è¤¦¤Ê¾ðÊó¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
470 The name of the source file that contains the test
472 ¥Æ¥¹¥È¤ò´Þ¤ó¤Ç¤¤¤ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë̾
475 The line number where the failure occurred
480 The name of the test case that failed
482 ¼ºÇÔ¤·¤¿¥Æ¥¹¥È¥±¡¼¥¹¤Î̾Á°
485 All of the text inside the call to
486 <code>CCUNIT_ASSERT ()</code> which detected the failure
488 ¼ºÇÔ¤ò¸¡ÃΤ·¤¿<code>CCUNIT_ASSERT ()</code>¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿»þ¤Î¾ò·ï¤Îʸ»úÎó¡£
493 @section helper_macros Helper Tool
495 @section helper_macros ¥Ø¥ë¥Ñ¡¼¥Ä¡¼¥ë
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.
505 ¤ªµ¤¤Å¤¤Î¤è¤¦¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤Î <code>suite ()</code>´Ø¿ô¤ò¼ÂÁõ¤¹¤ë¤Î¤Ï¡¢
506 È¿ÉüŪ¤Ç´Ö°ã¤¤¤ä¤¹¤¤ºî¶È¤Ç¤¹¡£
507 @ref CreatingTestSuite ¤Î´Ø¿ô¤Î¥»¥Ã¥È¤È¥³¥Þ¥ó¥É¤Ï<code>suite ()</code>
508 ´Ø¿ô¤Î¼ÂÁõ¤ò¼«Æ°Åª¤ËºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
511 @dontinclude complex/testComplex.c
514 The following code is a rewrite of ComplexTest using those command:
516 °Ê²¼¤Î¥³¡¼¥É¤Ï¤½¤ì¤é¤Î¥³¥Þ¥ó¥É¤¬»È¤¦¤è¤¦¤ËComplexTest¤ò½ñ´¹¤¨¤¿¤â¤Î¤Ç¤¹¡£
520 #include <cppunit/CCUnitAssert.h>
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:
528 ºÇ½é¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤òÀë¸À¤·¤Þ¤¹¡£
529 ¤³¤ì¤ÏjavaDoc¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥ÈÆâ¤Ë¥Õ¥£¥¯¥¹¥Á¥ã¤Î̾Á°¤òµ½Ò¤·¤Þ¤¹¡£
530 javaDoc¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤È¤Ï C ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¥Ö¥í¥Ã¥¯¤Î³«»Ï¤¬
531 Æó¤Ä¤Î¥¢¥¹¥¿¥ê¥¹¥¯<tt>*</tt>¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£
535 //** test case: complex number test *\/
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>:
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> ¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£
561 static complex_t* s10_1;
562 static complex_t* s1_1;
563 static complex_t* s11_2;
565 void setUp_complex_test ()
567 s10_1 = complex_new (10, 1);
568 s1_1 = complex_new (1, 1);
569 s11_2 = complex_new (11, 2);
572 void tearDown_complex_test ()
574 complex_delete (s10_1);
575 complex_delete (s1_1);
576 complex_delete (s11_2);
580 void test_complex_equals ()
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);
587 void test_complex_add ()
589 complex_t c10_1 = { 10.0, 1.0 };
590 complex_t c1_1 = { 1.0, 1.0 };
592 complex_t c11_2 = { 11.0, 2.0 };
593 CCUNIT_ASSERT (complex_equals (&c11_2, complex_add (&result, &c10_1, &c1_1)));
597 void test_complex_sub ()
599 complex_t c9_0 = { 9, 0 };
601 CCUNIT_ASSERT_TEST_OBJ (&c9_0, complex_equals,
602 complex_sub (&result, s10_1, s1_1),
608 Finally, you end the fixture declaration:
610 ºÇ¸å¤Ë¡¢¥Õ¥£¥¯¥¹¥Á¥ã¤Î½ª¤ê¤òÀë¸À¤·¤Þ¤¹¡£
614 //** end test case *\/
618 To generate creating suite function code, run
619 <code>ccunit_makeSuite</code> tool.
621 ¥¹¥¤¡¼¥ÈºîÀ®´Ø¿ô¤Î¥³¡¼¥É¤òÀ¸À®¤¹¤ë¤Ë¤Ï¡¢
622 <code>ccunit_makeSuite</code>¥Ä¡¼¥ë¤ò¼Â¹Ô¤·¤Þ¤¹¡£
626 $ ccunit_makeSuite -f complex_suite -o suiteComplex.c testComplex.c
629 #include <ccunit/CCUnitTestSuite.h>
630 #include <ccunit/CCUnitTestFixture.h>
631 #include <ccunit/CCUnitTestCase.h>
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 ();
645 static CCUnitTestFunc fx_001_cases[] = {
647 "test_complex_equals",
666 static CCUnitTestFixtureDfn fx_001 = {
667 { ccunitTypeFixture },
668 "complex number test",
670 "setUp_complex_test",
671 "setUp_complex_test",
675 "tearDown_complex_test",
676 "tearDown_complex_test",
677 tearDown_complex_test
682 static CCUnitTestDfn* suite_001_test[] = {
687 static CCUnitTestSuiteDfn suite_001 = {
694 CCUnitTestSuite* complex_suite (const char* name)
696 if (!suite_001.name[0])
697 suite_001.name = name;
698 return ccunit_newTestSuiteFromDfn (&suite_001);
704 @section post_build_check Post-build check
706 @section post_build_check ¥Ó¥ë¥É¸å¤Î¥Á¥§¥Ã¥¯
710 Now that we have our unit tests running, how about
711 integrating unit testing to our build process ?
713 ¤µ¤¢¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¤ò¼Â¹Ô¤¹¤ë½àÈ÷¤¬¤Ç¤¤Þ¤·¤¿¡£
714 ¤Ç¤Ï¥Ó¥ë¥É¥×¥í¥»¥¹¤Ë¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¤òÅý¹ç¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤¿¤é¤¤
719 To do that, the application must returns a value different than 0 to indicate that
722 ¤½¤¦¤¹¤ë¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤³¤È¤ò¼¨¤¹
723 £°°Ê³°¤ÎÃͤòÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
727 @link ccunit_runTestRunner() ccunit_runTestRunner() @endlink returns
728 a integer indicating if the run was successful.
730 @link ccunit_runTestRunner() ccunit_runTestRunner() @endlink
731 ¤Ï¡¢¼Â¹Ô¤¬À®¸ù¤·¤¿¤«¤É¤¦¤«¤ò¼¨¤¹À°¿ô¤òÊÖ¤·¤Þ¤¹¡£
735 Updating our main programm, we obtains:
737 ¼¡¤Î¤è¤¦¤Ë¥á¥¤¥ó¥×¥í¥°¥é¥à¤ò¹¹¿·¤·¤Þ¤¹¡£
741 #include <ccunit/CCUnitTestRunner.h>
743 int main (int argc, char** argv)
745 CCUnitTestRunner* runner;
746 CCUnitTestSuite* suite;
748 runner = ccunit_newTestRunner (stdout);
749 suite = ccunit_suite ();
750 wasSucessful = ccunit_runTestRunner (runner, suite);
756 Now, you need to run your application after compilation.
757 The sample program made in the above is in the examples/complex directory.
759 ¤½¤ì¤Ç¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¸å¤Ë¼Â¹Ô¤·¤Æ¤ß¤Þ¤·¤ç
761 °Ê¾å¤ÇºîÀ®¤·¤¿¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Ï examples/complex ¥Ç¥£¥ì¥¯