Index: [Article Count Order] [Thread]

Date:  Tue, 2 May 2000 12:27:13 +0900
From:  Masaki Suketa <CQN02273@....jp>
Subject:  [XP-jp:00324] Re: JUnit 利用方法
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <200005020327.MAA09812@....jp>
In-Reply-To:  firo's message of "Wed, 26 Apr 2000 13:00:48 +0900"	<00Apr26.130159jst.115201@....jp>
References:  <B52BD0C8.1178%khosokawa@....com>	<00Apr26.130159jst.115201@....jp>
Posted:  Tue, 2 May 2000 12:27:00 +0900 (JST)
X-Mail-Count: 00324

助田です.ちょっと古いメールへの反応ですが.

In message "[XP-jp:00263] Re: JUnit 利用方法"
    on 00/04/26, firo <firo@....jp> writes:

> ただ、1つのテスト・メソッド(testXXXなど)にassertXXX()が
> 1つしかないべき、ということではありません。(と私は思います)

私もそう思います.
JUnit は(Javaも)使ったことがないのですが,原則として

・1つのクラスに対して,1つのテストクラスを用意する.
・クラスのメソッド1つに対して,テストクラスのテスト・メソッド
  を用意する.

ぐらいが適当ではないかと思います.

例えば

  public class Foo {
      public void bar() {
          ...
      }
      public void baz() {
          ...
      }
  }

というクラスの場合は,

  public class TestFoo extends TestCase {
      public void testbar () {
          ...
      }
      public void testbaz () {
          ...
      }
  }

というテストクラスを用意して,testbar では Foo クラスの bar メソッド
に対するテストのコードをすべて書いてしまいます.
もちろん assert はいくつあっても構いません.(実際には複数あることの
方が多いのではないかと思います.)

メソッドやクラスの名前の付け方も

  Foo ---> TestFoo
  bar ---> testbar

というように対応がとれるようにします.

テスティングフレームワークを使用する場合には

1.testbar で bar メソッドの本来あるべき仕様を
    assertXXX を使って記述する.
2.bar メソッドを assertXXX を満足するように(本来の仕様に
    なるように)実装していく.

の順番に作業を繰り返します.

1.の作業を先にするのが結構重要なのではないかと思います.
Foo クラスの bar メソッドの仕様が明確でないとtestbarメソッドの
実装はできないでしょう.スムーズに実装できない場合には,bar メ
ソッドが何をすべきものか不明であるなどの何らかの問題があると
疑った方が良いと思います.
逆に1.の作業をすることで,bar メソッドの仕様がより明確に
なると思います.

bar メソッドに大幅な仕様変更があったとき,testbar も書き換え
なくてはならないのが結構つらいのですが.:-)

JUnit は使ったことがありませんが,RubyUnit はそんな感じで
試用しているところです.

  助田 雅紀 <CQN02273@....jp>