小井土です。
#先週一週間メールを確認できないところに行っていたので、
#少し追いついていません。m(__)m
中口さんの意見を呼んでいて、思ったのですが
テストと一言で言っていますが、XPでいうテストと他の方法論でいう
テストに少し違いがあるように感じています。
XPのテストは、テストモジュールを先に書くわけですから、当然ブラック
ボックスの仕様(インターフェイス)テストであると思います。
しかし、クラスを作る場合、他の方法論で言う単体テスト(ホワイトボックス的)
なものが必要になってくると思います。
これは、分けて議論すべきではないでしょうか。
----- Original Message -----
From: "Takao Nakaguchi" <takao-n@....jp>
To: "extremeprogramming-jp ML" <extremeprogramming-jp@....jp>
Sent: Sunday, October 01, 2000 11:31 PM
Subject: [XP-jp:00995] Re: テストのためだけのメソッド
> 中口です。
>
> ちょこっと参加させてください。
>
>
> アクセス権による視点の違いから考えてみます。
>
> (Javaの場合)アクセス権は、
> ・クラス内部
> ・派生クラス
> ・同じパッケージのクラス
> ・クラス外部(クラスを使う側)
> の 4つに分かれますよね。
>
> で、通常 XP でテストというと、4番目のクラス外部からのテストのことを指して
> ます。これは、クラスを使う側から見てクラスが正常に振る舞うことを確かめる
> ことがその目的だからだと思います。
>
> 存在しないメソッドやプライベートメソッドを使ってテストを書く場合、今まで
> クラスを使う側の視点でテストを書いていたところに、違う視点(テストする人
> 視点。クラス内部視点)が持ち込まれることになります。もちろんそれに付随する
> 情報(このメソッドはテストだけとか、他のプライベートメソッド、変数等)も
> 念頭に置く必要が出てくるので、テストを書く作業が必要以上に複雑なものに
> なってしまう危険性を感じてしまいます。
>
> だからってそのままにはしておけないので、
> クラス外部から呼び出せるメソッドを使った通常のテストクラスの他に、
> ・InnerTestCase クラス
> ・DerivedTestCase クラス
> ・PackageLevelTestCase クラス
> を別のテストクラスとして作成するってのはどうでしょうか?
> (先程のアクセス権のところに対応しています)
> InnerTestCase クラスでは、リフレクション用のヘルパメソッドを用意して。
>
>
> class SqlHandlerInnerTest extends InnerTestCase{
> public void testCommandMemberValid(){
> String sql = "select * from test";
> SqlHandler h = new SqlHandler(sql);
> assert(getMember(h, "command") == sql);
> }
> };
>
> こんな感じで。(コードはかなり適当)
> テストクラスを別に作る労力はいりますが、
>
> ・テストされるクラスをいじらなくて良い。
> ・テストを書く際の視点が分かれ、それぞれのテストの意味が明確になる
>
> てな利点があるかと。