小井土です。
#自己フォローです。
じっくり過去ログをよんだとこと
おおむらさんが以下のようにまとめてくれていました。
無意味な投げかけでした。
#反省
そのとおりだと思います。 賛成です。 (^o^)丿
おおむらさんからの引用
>まとめると、
>1. テストは対象クラスの中身を全部見てもかまわない。
>2. ただし、内部状態のテストと振舞いのテストは分離しておくべきである。
>3. また、当然ではあるが、内部状態のテストを書くときは、本当に必要な
>ものだけをテストすること--実装が変ると捨てられることになるので。
>いかがなものでしょうか
>一般論はともかく、現実には個々のプロジェクトで、いろんな状況があるで
>しょうから、それぞれで実状にあった方針を決めてやればいいだけですよね
----- Original Message -----
From: "Toru Koido" <koido@....jp>
To: "extremeprogramming-jp ML" <extremeprogramming-jp@....jp>
Sent: Monday, October 02, 2000 8:52 AM
Subject: [XP-jp:00997] Re: テストのためだけのメソッド
> 小井土です。
> #先週一週間メールを確認できないところに行っていたので、
> #少し追いついていません。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);
> > }
> > };
> >
> > こんな感じで。(コードはかなり適当)
> > テストクラスを別に作る労力はいりますが、
> >
> > ・テストされるクラスをいじらなくて良い。
> > ・テストを書く際の視点が分かれ、それぞれのテストの意味が明確になる
> >
> > てな利点があるかと。
>