2013-04-18 12 views
6

私はMockitoを使って簡単なセッターメソッドを模擬する方法を理解できないようです。 Mockitoのsettermethodを上書きする方法は?

class MyClass { 
    private SomeObject someObject; 

    public void setSomeObject(SomeObject someObject) { 
     this.someObject = someObject; 
    } 

    public someObject getSomeObject() { 
     return someObject; 
    } 
} 

は、今私はちょうど「setSomeObject」が呼び出されたときに「SomeObjectの」の新しいインスタンスが設定されていることをしたい:私は、次のクラスがあります。また、セッター内のパラメーターは無視する必要があります。

MyClass mockedClass = mock(MyClass.class); 
when(mockedClass.setSomeObject([ignoreWhatsInHere])) 
    .then(mockedClass.setSomeObject(new SomeObject(); 

しかし、私はこのために働い構文を得るように見えることはできません。

私はこのようなものが必要。私はgetters()を使ってモックを動かすことしかできません。何かを返すことができるからです。しかし、私はセッター()について同じことをする方法を理解することはできません。

すべてのお役に立ちました。

+0

なぜそれが必要ですか?正確に何を達成したいですか? – axtavt

+0

これは、戻り値がvoidに適用されないと言っているので、うまくいきません:/ – Lonelyisland

+0

うまくいけば、setSomeObject()は何とか呼び出されます:myClass.setSomeObject(someWeirdFunction.whichreturnsfinallySomeObject())。実際には、setterの呼び出しが存在するかどうかを知りたいだけで、オブジェクトを自分で設定したいと思っています。 – Lonelyisland

答えて

5

セッターを含むvoidを返すメソッドをテストするときは、doThrow()|doAnswer()|doNothing()|doReturn()ファミリのメソッドを使用して適切なアクションを実行する必要があります。だからではなく、

when(mockedObject.someMethod()).thenReturn(something) 

のあなたはそれがないひどくエレガントだが、カスタムの回答オブジェクトを返すためにdoAnswer()を使用して、あなたはスタブ使ったほうが良いかもしれません:あなたが返すようにしようとしている場合

doAnswer(new Answer() { 
    public Object answer(InvocationOnMock invocation) { 
      //whatever code you want to run when the method is called 
      return null; 
    }}).when(mockedObject).someMethod(); 
} 

を同じgetter呼び出しとは異なる値を返す場合は、メソッドの最初の呼び出しでエラーをスローし、2番目の呼び出しからオブジェクトを返すなど、mockitoの連続したスタブ呼び出しを調べることもできます。

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#12を参照してください。

関連する問題