Menu

FrontPage

Eclipseプラグイン
Eclipse小技集
リファクタリング講座
テスティングフレームワーク JUnit
MSDEについて



The 20 newest affair
2010-09-092010-09-082010-09-072010-09-062010-09-012010-08-312010-08-272010-08-242010-08-232010-08-172010-08-162010-07-302010-07-212010-07-132010-06-272010-06-182010-06-172010-06-16









Virtual Mock Objectsとは?  Λ


Virtual Mock Objectsとは、「ある改造」を加えられたクラスのことを言います。

「ある改造」とは、クラスのすべてのメソッドが、

  • 本来のロジックを実行したり
  • 本来のロジックを実行せず、指定の値を返却して終了したり

できるように、ロジックが挿入されるという改造です。

この改造が自動的に行われるため、テスト時のMockObjectの生成、注入の手間が減り、
かつ、MockObjectを利用したテストと同等の効果を得ることができます。

どうしてメソッドの戻り値を指定することができるのか  Λ


具体的に、どのような改造がおこなわれているのかを見ていきます。

下記は「改造前」「改造後」のソース例です。

改造前
1 public class SimpleClass {
2   
3   public String getMessage() {
4     return "Message...";
5   }
6 
7 }

改造後
01 public class SimpleClass {
02   
03   public String getMessage() {
04     
05     {
06       Object value = MockObjectManager.getReturnValue("SimpleClass""getMessage");
07       if (value != null) {
08         return (Stringvalue;
09       }
10     }
11     
12     return "Message...";
13   }
14 
15 }

改造後のSimpleClassを見ていただければわかりますが、getMessage()の「ド頭」に、ちょっとしたロジックが挿入されています。[05~10行目]


これによって、getMessage()が実行されたときには、

[06行目]staticな領域に用意されているMapから、「クラス名」と「メソッド名」をキーにして、オブジェクトを取り出します。

[07行目]取り出したオブジェクトが、nullかどうかで、処理が分岐します。
[08行目]nullではないとき、

    returnします。
    このとき、返却値になるのは、[6行目]で取り出したオブジェクトです。
    ですので、本来のロジックである「return "Message...";」[12行目]は実行されません。

[12行目]nullのとき、

    本来のロジックである、この行が実行されます。
    このとき、返却値になるのは、「Message...」です。


ですので、
事前に、

staticな領域に用意されているMapに

「クラス名」と「メソッド名」をキーにして

オブジェクトを登録しておけば、

該当するメソッドは、実行時に、

登録してあるオブジェクトを取り出して、それを返却

します。

以上が、「本来のロジックを実行したり、しなかったりする」ため、
そして「メソッドの返却値を好みのものに変更する」ための基本的な仕掛けです。
(もちろん、これだけではありませんが。。。)

あとで出てきますが、「staticな領域に用意されているMap」に、オブジェクトを登録するのが、「addReturnValue」「setReturnValueAt」などです。

Virtual Mock Objectsの設定  Λ


djUnitのVirtual Mock Objectsは、デフォルトで「使用しない」という設定になっていますので、
使用するときは、「Virtual Mock Objects使用する」にしてください。

djUnit設定方法を参照願います。

テストケースの準備  Λ


下記2種類の方法があります。

  • DJUnitTestCaseをextendsする
  • MyDJUnitTestCaseクラスを作成し、それをextendsする

詳細は、テストケースの準備を参照願います。

Virtua Mock Objectsのためのメソッド一覧  Λ


メソッド名内容
addReturnValueメソッドの返却値を好みのものに変更する, 複数回実行されるメソッドに返却値をセットする
setReturnValueAt複数回実行されるメソッドに返却値をセットする
setReturnValueAtAllTimes複数回実行されるメソッドに返却値をセットする
addReturnNullメソッドの返却値を好みのものに変更する, 複数回実行されるメソッドに返却値をセットする
setReturnNullAt複数回実行されるメソッドに返却値をセットする
setReturnNullAtAllTimes複数回実行されるメソッドに返却値をセットする
getArgumentメソッド呼び出し時の引数を確認する
getCallCountメソッドが呼び出されたことを確認する
assertArgumentPassed参考 : HelloWorldのテスト
assertCalledメソッドが呼び出されたことを確認する
assertNotCalledメソッドが呼び出されたことを確認する

djUnitのVirtual Mock Objectsのサンプル  Λ


HelloWorldTest

従来の方法と、VirtualMockObjectsを使用した方法を比較します。

基本編

VirtualMockObjectsの基本的な使い方を解説します。

注意編


実験編



Attached File: [Attached File All List]

Lastmodified: 2010-06-16 (水) 06:36:57 (85d)