|
検査対象クラス:テストクラス=1:1http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@E6A49CE69FBBE5AFBEE8B1A1E382AFE383A9E382B9EFBC9AE38386E382B9E38388E382AFE383A9E382B9EFBC9DEFBC91EFBC9AEFBC91Encoding:UTF-8 / Locale:en_US / PageStatus: Frozen Owner of this page:kataoka |
|
未完成ページ
はじめに単体テストを行う際に、クラスの依存関係が問題になることが多々あります。そしてその依存関係のために、
ことと、依存関係を断ち切るための方法として
であることを書きます。 最終的には、「Virtual Mock Object」が、「Mock Object」の方法を、
という結論にもっていこうと企んでいます。 クラスの依存関係 Λテスト対象クラスとして、2つのクラスを示します。
本来であれば、おしゃれにクラス図などを書くべきなのですが、それほどのプログラムでもないので書きません。 とりあえず、 1) InfoUserは、PluginInfoを持っていて、使用している。 といったところです。 しつこいようですが、 InfoUser#getPluginName()を実行するということは、を意味します。 そのままの依存関係でテストする Λこれらのクラスをテストしようと考えてみます。 とりあえず、テストクラスを2つ作るんでしょうか。
あ、info.propertiesも必要です。 info.properties name=djUnit とします。 最初に「InfoUserTest」を書いてみます。
こんな風になりました。 このテストは、「InfoUserのテスト」のつもりで作りました。 するってぇと、もうひとつのテストは、
ってな感じでしょうか。 問題点 Λ上記テストを作っていて、ちと納得いかないところが出てきました。
ということです。 InfoUserのテストは、それぞれPluginInfoを含めたテストをしています。 そして、PluginInfoの全ステップを実行しますので、わざわざ、「PluginInfoTest」を作成しなくても、いいように思います。 (こんな場合、我々は、PluginInfoのテストは書きません。) あとは、
仕方のないことですが、ここが結構気になります。 検査対象である、InfoUser, PluginInfoは、 なとなくでも、役割によってクラス分けされているはずで、 に対して、テストクラスである、InfoUserTestは、 役割ごとのテストに分かれていない。 このように、テストを作成する時には、大した問題ではないように思えますが、テストを保守するときには、結構問題となります。 そしてこれは、データベースを使用している場合で、テーブルが修正になってしまったとき、
とりあえずの結論 Λこれを見てきて思うのは、 InfoUserのテストでは、 テストクラス : InfoUserTest となります。 これを「検査対象クラス : テストクラス = 1 : 1」に持ち込むことができれば、
|
||||||||||||