|
Virtual Mock Objectsを使ったテストhttp://works.dgic.co.jp/djwiki/Viewpage.do?pid=@5669727475616C204D6F636B204F626A65637473E38292E4BDBFE381A3E3819FE38386E382B9E38388Encoding:UTF-8 / Locale:en_US / PageStatus: Frozen Owner of this page:kataoka |
Virtual Mock Objectsとは? ΛVirtual Mock Objectsとは、「ある改造」を加えられたクラスのことを言います。 「ある改造」とは、クラスのすべてのメソッドが、
できるように、ロジックが挿入されるという改造です。 この改造が自動的に行われるため、テスト時のMockObjectの生成、注入の手間が減り、 かつ、MockObjectを利用したテストと同等の効果を得ることができます。 どうしてメソッドの戻り値を指定することができるのか Λ具体的に、どのような改造がおこなわれているのかを見ていきます。 下記は「改造前」「改造後」のソース例です。 改造前
改造後
改造後のSimpleClassを見ていただければわかりますが、getMessage()の「ド頭」に、ちょっとしたロジックが挿入されています。[05~10行目] これによって、getMessage()が実行されたときには、 [06行目]staticな領域に用意されているMapから、「クラス名」と「メソッド名」をキーにして、オブジェクトを取り出します。 [07行目]取り出したオブジェクトが、nullかどうかで、処理が分岐します。 [08行目]nullではないとき、 returnします。 このとき、返却値になるのは、[6行目]で取り出したオブジェクトです。 ですので、本来のロジックである「return "Message...";」[12行目]は実行されません。 [12行目]nullのとき、 本来のロジックである、この行が実行されます。 このとき、返却値になるのは、「Message...」です。 ですので、 事前に、 します。 以上が、「本来のロジックを実行したり、しなかったりする」ため、 そして「メソッドの返却値を好みのものに変更する」ための基本的な仕掛けです。 (もちろん、これだけではありませんが。。。) あとで出てきますが、「staticな領域に用意されているMap」に、オブジェクトを登録するのが、「addReturnValue」「setReturnValueAt」などです。 Virtual Mock Objectsの設定 ΛdjUnitのVirtual Mock Objectsは、デフォルトで「使用しない」という設定になっていますので、 使用するときは、「Virtual Mock Objects使用する」にしてください。 djUnit設定方法を参照願います。 テストケースの準備 Λ下記2種類の方法があります。
詳細は、テストケースの準備を参照願います。 Virtua Mock Objectsのためのメソッド一覧 Λ
djUnitのVirtual Mock Objectsのサンプル ΛHelloWorldTest従来の方法と、VirtualMockObjectsを使用した方法を比較します。基本編VirtualMockObjectsの基本的な使い方を解説します。
注意編実験編 |