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-24 00:10
typ
HTML
editor
TSUTSUMI Kikuo
beschreibung
CCUnitをつかってテストを実装するためのクックブック
sprache
English
Japanese
translate
--- /tmp/DOCMAN2qN6eWJ	2025-01-19 21:34:10.496871110 +0900
+++ /tmp/DOCMAN2HHqFYS	2025-01-19 21:34:10.496871110 +0900
@@ -1,361 +1 @@
-<!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>
+<a href="http://ccunit.sourceforge.jp/jp/index.html>CCUnit japanese documentation</a>