Open-Source-Software-Entwicklung und Downloads

Show incremental difference of selected versions of クックブック.

category(Tag) tree

file info

category(Tag)
Wurzel
dateiname
Cookbook
letztes update
2003-10-23 09:14
typ
HTML
editor
TSUTSUMI Kikuo
beschreibung
CCUnitをつかってテストを実装するためのクックブック
sprache
English
Japanese
translate
--- /tmp/DOCMAN2J5QsRw	2025-01-19 22:12:49.593830259 +0900
+++ /tmp/DOCMAN2V42CZo	2025-01-19 22:12:49.593830259 +0900
@@ -1 +1,361 @@
-http://ccunit.sourceforge.jp/cookbook_jp.html
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html>
+<head>
+<title>
+CCUnit - The Unit Testing Library for C language
+</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head>
+
+<body bgcolor="#ffffff">
+<table width="100%">
+  <tr>
+    <td width="40%" align="left" valign="center">
+      <a href="http://sourceforge.jp/projects/ccunit">
+      CCUnit project page
+      </a>
+    </td>
+    <td>
+      <!-- a href="FAQ">FAQ</a -->
+    </td>
+    <td width="40%" align="right" valign="center">
+      <a href="http://ccunit.sourceforge.jp">CCUnit home page</a>
+    </td>
+  </tr>
+</table>
+
+<hr>
+<!-- Generated by Doxygen 1.3.3 -->
+<div class="qindex"><a class="qindex" href="index.html">Main?Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data?Structures</a> | <a class="qindex" href="files.html">File?List</a> | <a class="qindex" href="functions.html">Data?Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related?Pages</a></div>
+<h1><a name="cookbook_ja">CCUnit Cookbook (ja)</a>
+</h1> CCUnit  <h2><a name="simple_test_case_ja"></a>
+</h2>
+CCUnit CCUnit   <p>
+<p>
+<ol>
+<li>
+ </li>
+<li>
+ <a class="el" href="group__Assertions.html#a2">CCUNIT_ASSERT(bool) </a>   </li>
+</ol>
+<p>
+ <p>
+<div class="fragment"><pre><span class="keywordtype">void</span> test_complex_add ()
+{
+  complex_t c10_1 = { 10.0, 1.0 };
+  complex_t c1_1 = { 1.0, 1.0 };
+  complex_t result;
+  complex_t c11_2 = { 11.0, 2.0 };
+  <a class="code" href="group__Assertions.html#a2">CCUNIT_ASSERT</a> (complex_equals (&c11_2, complex_add (&result, c10_1, c1_1)));
+}
+</pre></div><p>
+   <h2><a name="fixture_ja"></a>
+</h2>
+ <p>
+    <p>
+ <p>
+<ol>
+<li>
+<a class="el" href="group__CCUnitTestCase.html">CCUnitTestCase </a>    </li>
+<li>
+ </li>
+<li>
+<code>setUp()</code>  </li>
+<li>
+<code>tearDown()</code> <code>setUp</code>  </li>
+<li>
+<a class="el" href="group__CCUnitTestFixture.html">CCUnitTestFixture </a>  </li>
+<li>
+ </li>
+</ol>
+<p>
+ <p>
+<div class="fragment"><pre><span class="comment">/** TEST CASE:  */</span>
+
+<span class="preprocessor">#include "complex.h"</span>
+
+<span class="keyword">static</span> complex_t* s10_1;
+<span class="keyword">static</span> complex_t* s1_1;
+<span class="keyword">static</span> complex_t* s11_2;
+
+<span class="keywordtype">void</span> setUp_ComplexTest ()
+{
+  s10_1 = complex_new (10, 1);
+  s1_1 = complex_new (1, 1);
+  s11_2 = complex_new (11, 2);
+}
+
+<span class="keywordtype">void</span> tearDown_ComplexTest ()
+{
+  complex_delete (s10_1);
+  complex_delete (s1_1);
+  complex_delete (s11_2);
+}
+
+...
+
+  <a class="code" href="structCCUnitTestFixture.html">CCUnitTestFixture</a>* fixture;
+  fixture = <a class="code" href="group__CCUnitTestFixture.html#a1">ccunit_newTestFixture</a> (<span class="stringliteral">"ComplexTest"</span>,
+                                   <a class="code" href="group__CCUnitTestCase.html#a5">CCUNIT_NEWTESTFUNC</a>(setUp_ComplexTest),
+                                   <a class="code" href="group__CCUnitTestCase.html#a5">CCUNIT_NEWTESTFUNC</a>(tearDown_ComplexTest));
+</pre></div><p>
+ <h2><a name="test_case_ja"></a>
+</h2>
+ <p>
+ <p>
+<div class="fragment"><pre><span class="keywordtype">void</span> test_complex_equals ()
+{
+  <a class="code" href="group__Assertions.html#a18">CCUNIT_ASSERT_TEST_OBJ</a> (s10_1, complex_equals, s10_1, complex_to_string);
+  <a class="code" href="group__Assertions.html#a18">CCUNIT_ASSERT_TEST_OBJ</a> (s10_1, !complex_equals, s1_1, complex_to_string);
+}
+
+...
+
+  <a class="code" href="group__CCUnitTestFixture.html#a3">ccunit_addNewTestCase</a> (fixture,
+                         <span class="stringliteral">"test_complex_equals"</span>,
+                         <span class="stringliteral">""</span>,
+                         test_complex_equals);
+  <a class="code" href="group__CCUnitTestFixture.html#a3">ccunit_addNewTestCase</a> (fixture,
+                         <span class="stringliteral">"test_complex_add"</span>,
+                         <span class="stringliteral">""</span>,
+                         test_complex_add);
+</pre></div><p>
+  <p>
+<div class="fragment"><pre>  <a class="code" href="structCCUnitTestResult.html">CCUnitTestResult</a>* result;
+  result = <a class="code" href="group__CCUnitTestFixture.html#a4">ccunit_runTestFixture</a> (fixture);
+</pre></div><p>
+     <a class="el" href="group__ExecutingTest.html">TestRunner </a> () <p>
+ <h2><a name="suite_ja"></a>
+</h2>
+ <p>
+CCUnit  TestCases  <a class="el" href="group__CCUnitTestSuite.html">TestSuite </a> <p>
+ <p>
+<div class="fragment"><pre><a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* suite;
+<a class="code" href="structCCUnitTestFixture.html">CCUnitTestFixture</a>* fixture;
+<a class="code" href="structCCUnitTestResult.html">CCUnitTestResult</a>* result;
+suite = <a class="code" href="group__CCUnitTestSuite.html#a3">ccunit_newTestSuite</a> (<span class="stringliteral">""</span>);
+fixture = <a class="code" href="group__CCUnitTestFixture.html#a1">ccunit_newTestFixture</a> (<span class="stringliteral">""</span>,
+                                 <a class="code" href="group__CCUnitTestCase.html#a5">CCUNIT_NEWTESTFUNC</a>(setUp_complex_test),
+                                 <a class="code" href="group__CCUnitTestCase.html#a5">CCUNIT_NEWTESTFUNC</a>(tearDown_complex_test));
+<a class="code" href="group__CCUnitTestFixture.html#a3">ccunit_addNewTestCase</a> (fixture, <span class="stringliteral">"test_complex_equals"</span>, <span class="stringliteral">""</span>,
+                       test_complex_equals);
+<a class="code" href="group__CCUnitTestFixture.html#a3">ccunit_addNewTestCase</a> (fixture, <span class="stringliteral">"test_complex_add"</span>, <span class="stringliteral">""</span>,
+                       test_complex_add);
+<a class="code" href="group__CCUnitTestFixture.html#a3">ccunit_addNewTestCase</a> (fixture, <span class="stringliteral">"test_complex_sub"</span>, <span class="stringliteral">""</span>,
+                       test_complex_sub);
+<a class="code" href="group__CCUnitTestSuite.html#a8">ccunit_addTestFixture</a> (suite, fixtuer);
+result = <a class="code" href="group__CCUnitTestSuite.html#a9">ccunit_runTestSuite</a> (suite, NULL);
+</pre></div><p>
+<a class="el" href="group__CCUnitTestSuite.html">TestSuites </a>  <a class="el" href="group__CCUnitTestFixture.html">TestFixtures </a> <p>
+ <a class="el" href="group__CCUnitTest.html">Test </a>  <a class="el" href="group__CCUnitTestSuite.html">TestSuite </a>   <a class="el" href="group__CCUnitTestSuite.html">TestSuite </a> <p>
+<div class="fragment"><pre><a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* suite;
+<a class="code" href="structCCUnitTestResult.html">CCUnitTestResult</a>* result;
+suite = <a class="code" href="group__CCUnitTestSuite.html#a3">ccunit_newTestSuite</a> (<span class="stringliteral">"suite"</span>);
+<a class="code" href="group__CCUnitTestSuite.html#a7">ccunit_addTestSuite</a> (suite, complex_add_sub_suite ()); <span class="comment">/*  */</span>
+<a class="code" href="group__CCUnitTestSuite.html#a7">ccunit_addTestSuite</a> (suite, complex_mul_div_suite ()); <span class="comment">/*  */</span>
+result = <a class="code" href="group__CCUnitTestSuite.html#a9">ccunit_runTestSuite</a>(suite, NULL);
+</pre></div><h2><a name="test_runner_ja"></a>
+TestRunner</h2>
+How do you run your tests and collect their results?<p>
+Once you have a test suite, you'll want to run it. CCUnit provides tools to define the suite to be run and to display its results. You make your suite accessible to a <a class="el" href="group__CreatingTestSuite.html">ccunit_makeSuite </a> tool that generate a creating test suite code.<p>
+For example, to make a ComplexTest suite available to a <a class="el" href="group__CreatingTestSuite.html">ccunit_makeSuite </a>, excute the following tool to ComplexTest.c:<p>
+<div class="fragment"><pre>$ <a class="code" href="group__CCUnitMakeSuite.html#a1">ccunit_makeSuite</a> -f complex_suite -o suiteComplex.c ComplexTest.c
+</pre></div><p>
+<a name="test_runner_code"/></a> To use the TestRunner, include the header files for the tests in Main.c:<p>
+<div class="fragment"><pre><span class="preprocessor">#include <<a class="code" href="CCUnitTestRunner_8h.html">ccunit/CCUnitTestRunner.h</a>></span>
+<span class="preprocessor">#include <<a class="code" href="CCUnitTestSuite_8h.html">ccunit/CCUnitTestSuite.h</a>></span>
+</pre></div><p>
+And call to <a class="el" href="group__CCUnitTestRunner.html#a9">ccunit_runTestRunner (CCUnitTestRunner*, CCUnitTestSuite *) </a> in the <code><a class="el" href="group__CreatingTestSuite.html#a9">main()</a></code> function:<p>
+<div class="fragment"><pre><span class="keyword">extern</span> <a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* complex_suite(<span class="keyword">const</span> <span class="keywordtype">char</span>* name);
+
+<span class="keywordtype">int</span> <a class="code" href="group__CreatingTestSuite.html#a9">main</a>( <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)
+{
+  <a class="code" href="structCCUnitTestRunner.html">CCUnitTestRunner</a>* runner;
+  <a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* suite;
+  runner = <a class="code" href="group__CCUnitTestRunner.html#a7">ccunit_newTestRunner</a> (stdout);
+  suite = complex_suite (<span class="stringliteral">"complex test suite"</span>);
+  <span class="keywordflow">return</span> <a class="code" href="group__CCUnitTestRunner.html#a9">ccunit_runTestRunner</a> (runner, suite);
+}
+</pre></div><p>
+The <a class="el" href="group__ExecutingTest.html">TestRunner </a> will run the tests. If all the tests pass, you'll get an informative message. If any fail, you'll get the following information:<p>
+<ul>
+<li>
+The name of the source file that contains the test </li>
+<li>
+The line number where the failure occurred </li>
+<li>
+The name of the test case that failed </li>
+<li>
+All of the text inside the call to <code>CCUNIT_ASSERT ()</code> which detected the failure </li>
+</ul>
+<h2><a name="helper_macros_ja"></a>
+Helper Tool</h2>
+As you might have noticed, implementing the fixture <code>suite ()</code> function is a repetitive and error prone task. A <a class="el" href="group__CreatingTestSuite.html">Creating TestSuite</a> set of functions and command have been created to automatically implements the <code>suite()</code> method.<p>
+The following code is a rewrite of ComplexTest using those command:<p>
+<div class="fragment"><pre><span class="preprocessor">#include <cppunit/CCUnitAssert.h></span>
+</pre></div><p>
+First, you declare the fixture, passing the test fixture name to the javaDoc style comment, which consist of a C-style comment block starting with two <code>*</code>'s:<p>
+<div class="fragment"><pre><span class="comment">/** test case: complex number test */</span>
+</pre></div><p>
+The suite created by the <code><a class="el" href="group__CreatingTestSuite.html#a8">ccunit_suite()</a></code> function is specified <code>-f</code> option of command <code>ccunit_makeSuite</code>. Then, you define each test case of the fixture with prefix <code>test</code>, <code>setUp</code>, <code>tearDown</code>:<p>
+<div class="fragment"><pre><span class="preprocessor">#include <complex.h></span>
+
+<span class="keyword">static</span> complex_t* s10_1;
+<span class="keyword">static</span> complex_t* s1_1;
+<span class="keyword">static</span> complex_t* s11_2;
+
+<span class="keywordtype">void</span> setUp_complex_test ()
+{
+  s10_1 = complex_new (10, 1);
+  s1_1 = complex_new (1, 1);
+  s11_2 = complex_new (11, 2);
+}
+
+<span class="keywordtype">void</span> tearDown_complex_test ()
+{
+  complex_delete (s10_1);
+  complex_delete (s1_1);
+  complex_delete (s11_2);
+}
+
+<span class="comment">/** test equals */</span>
+<span class="keywordtype">void</span> test_complex_equals ()
+{
+  <a class="code" href="group__Assertions.html#a18">CCUNIT_ASSERT_TEST_OBJ</a> (s10_1, complex_equals, s10_1, complex_to_string);
+  <a class="code" href="group__Assertions.html#a18">CCUNIT_ASSERT_TEST_OBJ</a> (s10_1, !complex_equals, s1_1, complex_to_string);
+}
+
+<span class="comment">/** test add */</span>
+<span class="keywordtype">void</span> test_complex_add ()
+{
+  complex_t c10_1 = { 10.0, 1.0 };
+  complex_t c1_1 = { 1.0, 1.0 };
+  complex_t result;
+  complex_t c11_2 = { 11.0, 2.0 };
+  <a class="code" href="group__Assertions.html#a2">CCUNIT_ASSERT</a> (complex_equals (&c11_2, complex_add (&result, &c10_1, &c1_1)));
+}
+
+<span class="comment">/** test sub */</span>
+<span class="keywordtype">void</span> test_complex_sub ()
+{
+  complex_t c9_0 = { 9, 0 };
+  complex_t result;
+  <a class="code" href="group__Assertions.html#a18">CCUNIT_ASSERT_TEST_OBJ</a> (&c9_0, complex_equals,
+                          complex_sub (&result, s10_1, s1_1),
+                          complex_to_string);
+}
+</pre></div><p>
+Finally, you end the fixture declaration:<p>
+<div class="fragment"><pre><span class="comment">/** end test case */</span>
+</pre></div><p>
+To generate creating suite function code, run <code>ccunit_makeSuite</code> tool.<p>
+<div class="fragment"><pre>$ <a class="code" href="group__CCUnitMakeSuite.html#a1">ccunit_makeSuite</a> testComplex.c
+
+<span class="preprocessor">#include <<a class="code" href="CCUnitTestSuite_8h.html">ccunit/CCUnitTestSuite.h</a>></span>
+<span class="preprocessor">#include <<a class="code" href="CCUnitTestFixture_8h.html">ccunit/CCUnitTestFixture.h</a>></span>
+<span class="preprocessor">#include <<a class="code" href="CCUnitTestCase_8h.html">ccunit/CCUnitTestCase.h</a>></span>
+
+<span class="comment">/* test fixture: complex number test */</span>
+<span class="comment">/* setUp_complex_test */</span>
+<span class="keyword">extern</span> <span class="keywordtype">void</span> setUp_complex_test ();
+<span class="comment">/* tearDown_complex_test */</span>
+<span class="keyword">extern</span> <span class="keywordtype">void</span> tearDown_complex_test ();
+<span class="comment">/* test_complex_equals */</span>
+<span class="keyword">extern</span> <span class="keywordtype">void</span> test_complex_equals ();
+<span class="comment">/* test_complex_add */</span>
+<span class="keyword">extern</span> <span class="keywordtype">void</span> test_complex_add ();
+<span class="comment">/* test_complex_sub */</span>
+<span class="keyword">extern</span> <span class="keywordtype">void</span> test_complex_sub ();
+
+
+<span class="keyword">static</span> <a class="code" href="structCCUnitTestFixtureDfn.html">CCUnitTestFixtureDfn</a> fx_001 = {
+  { <a class="code" href="CCUnitTest_8h.html#a10a5">ccunitTypeFixture</a> },
+  <span class="stringliteral">"complex number test"</span>,
+  {
+    <span class="stringliteral">"setUp_complex_test"</span>,
+    <span class="stringliteral">"setUp_complex_test"</span>,
+    setUp_complex_test
+  },
+  {
+    <span class="stringliteral">"tearDown_complex_test"</span>,
+    <span class="stringliteral">"tearDown_complex_test"</span>,
+    tearDown_complex_test
+  },
+  {
+    {
+      <span class="stringliteral">"test_complex_equals"</span>,
+      <span class="stringliteral">"test equals"</span>,
+      test_complex_equals
+    },
+    {
+      <span class="stringliteral">"test_complex_add"</span>,
+      <span class="stringliteral">"test add"</span>,
+      test_complex_add
+    },
+    {
+      <span class="stringliteral">"test_complex_sub"</span>,
+      <span class="stringliteral">"test sub"</span>,
+      test_complex_sub
+    },
+    {
+      NULL, NULL, NULL
+    },
+  }
+};
+
+<span class="keyword">static</span> <a class="code" href="structCCUnitTestSuiteDfn.html">CCUnitTestSuiteDfn</a> suite_001 = {
+  { <a class="code" href="CCUnitTest_8h.html#a10a4">ccunitTypeSuite</a> },
+  <span class="stringliteral">""</span>,
+  {
+    &suite_002.test,
+    NULL,
+  },
+};
+
+<a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* <a class="code" href="group__CreatingTestSuite.html#a8">ccunit_suite</a> (<span class="keyword">const</span> <span class="keywordtype">char</span>* name)
+{
+  <span class="keywordflow">if</span> (!suite_001.<a class="code" href="structCCUnitTestSuiteDfn.html#o1">name</a>[0])
+    suite_001.<a class="code" href="structCCUnitTestSuiteDfn.html#o1">name</a> = name;
+  <span class="keywordflow">return</span> <a class="code" href="group__CCUnitTestSuite.html#a4">ccunit_newTestSuiteFromDfn</a> (&suite_001);
+}
+$
+</pre></div><h2><a name="post_build_check_ja"></a>
+Post-build check</h2>
+Now that we have our unit tests running, how about integrating unit testing to our build process ?<p>
+To do that, the application must returns a value different than 0 to indicate that there was an error.<p>
+<a class="el" href="group__CCUnitTestRunner.html#a9">ccunit_runTestRunner() </a> returns a integer indicating if the run was successful.<p>
+Updating our main programm, we obtains: <div class="fragment"><pre><span class="preprocessor">#include <<a class="code" href="CCUnitTestRunner_8h.html">ccunit/CCUnitTestRunner.h</a>></span>
+
+<span class="keywordtype">int</span> <a class="code" href="group__CreatingTestSuite.html#a9">main</a> (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv)
+{
+  <a class="code" href="structCCUnitTestRunner.html">CCUnitTestRunner</a>* runner;
+  <a class="code" href="structCCUnitTestSuite.html">CCUnitTestSuite</a>* suite;
+  <span class="keywordtype">int</span> wasSucessful;
+  runner = <a class="code" href="group__CCUnitTestRunner.html#a7">ccunit_newTestRunner</a> (stdout);
+  suite = <a class="code" href="group__CreatingTestSuite.html#a8">ccunit_suite</a> ();
+  wasSucessful = <a class="code" href="group__CCUnitTestRunner.html#a9">ccunit_runTestRunner</a> (runner, suite);
+  <span class="keywordflow">return</span> wasSucessful;
+}
+</pre></div><p>
+Now, you need to run your application after compilation. <hr>
+<table width="100%">
+  <tr>
+    <td width="10%" align="left" valign="center">
+	<a href="http://sourceforge.jp/">
+	<img src="http://sourceforge.jp/sflogo.php?group_id=760"
+	 width="96" height="31" border="0" alt="SourceForge.jp"></a>
+    </td>
+    <td width="20%" align="left" valign="center">
+      hosts this site.
+    </td>
+    <td>
+    </td>
+    <td align="right" valign="center">
+      Send comments to:<br>
+      <a href="mailto:tsutsumi@users.sourceforge.jp">CCUnit Developer</a>
+    </td>
+  </tr>
+</table>
+
+</body>
+</html>