自体

2009-05-10 6 views
1

にNULL値を返すためにJmockとのモックを作成する私は、次のようになります方法があります。自体

public void myMethod(MyClass c) 
{ 
    if (c == null) 
    { 
    return; 
    } 
    try 
    { 
    c.someMethod(); 
    } 
    catch (SomeException e) 
    { 
    // log the exception, possibly re-throw 
    } 
} 

を私はMyClassのパラメータのモックインスタンスを設定する方法を見つけようとしていますc自身のためにnullの値を返し、c.someMethod()が呼び出されないようにします。私のユニットテストは、次のようになります。

@Test 
public void Test_myMethod_With_Null_MyClass_Does_Not_Call_someMethod() 
{ 
    Mockery mockery = new Mockery() 
    {{ 
      setImposteriser(ClassImposteriser.INSTANCE); 
    }}; 

    final MyClass mockMyClass = mockery.mock(MyClass.class); 

    try 
    { 
     mockery.checking(new Expectations() 
     {{ 
      oneOf(mockMyClass).equals(null); 
       will(returnValue(true)); 

      never(mockMyClass).someMethod(); 
     }}); 
    } 
    catch (Exception e) 
    { 
     logger.fatal(e); 
     fail("Exception thrown in test."); 
    } 
    Util.myMethod(mockMyClass); 
} 

は基本的に、私は、MyClassののモックインスタンスを設定し、その値はNULL値に対してテストされたとき、それはtrueを返しますということで期待を設定していて、メソッドsomeMethod()が呼び出されないことを示します。

jMockはObjectクラス(equals(null)パーツ)によって提供されるメソッドをオーバーライドすることはできないと言っているので、テストは失敗しています。

jMockでこれを行う方法はありますか?このパターンは理にかなっていますか?これは有効なテストですか?そうでない場合は、誰にもこれをテストする方法に関する提案はありますか?

答えて

3

私はこのコードをJMockだけでテストすることはできません。

nullを直接渡してテストします。例外がスローされないか、ログインしている場合、あなたはそれがより明確にするために望んでいた場合は、try/catchブロックでmyMethod(null)呼び出しをラップすることができ、

public void Test_myMethod_With_Null_MyClass_Does_Not_Call_someMethod() 
{ 
    Util.myMethod(null); 
    //no exception should be thrown. 
} 

テスト@。あなたのコードが期待通りに働いていたことを知っているが、それ障害が発生した場合の障害原因を明確にすること以外は必要ありません。

public void Test_myMethod_With_Null_MyClass_Does_Not_Call_someMethod() 
{ 
    try 
    { 
     Util.myMethod(null); 
    } 
    catch(ExpectedException e) 
    { 
     fail("Should not have thrown exception: " + e.getMessage()); 
    } 
} 

あなたはcnullであるならば、当然のc.something()を呼び出すことはできませんことを知っているので、これは十分なテストです。

+0

これは実際にはこれをテストする唯一の方法だと思います。つまり、nullを渡すことです。実際にそれを行う方法があるかどうかを確認するだけです。乾杯! – matt

1

モックは、オブジェクトがその共同編集者とどのように対話するかをテストするために使用されることになっています。協力者がいない場合は、嘲笑することはありません。ヌルを渡すことは、より簡単で表現力があります。