void 戻り値の型を持つメソッドをモックするにはどうすればよいですか?
オブザーバーパターンを実装しましたが、方法がわからないため、Mockito でモック化できません。
そして、インターネットで例を見つけようとしましたが、見つかりません。
私のクラスは次のようになります:
public class World {
List<Listener> listeners;
void addListener(Listener item) {
listeners.add(item);
}
void doAction(Action goal,Object obj) {
setState("i received");
goal.doAction(obj);
setState("i finished");
}
private string state;
//setter getter state
}
public class WorldTest implements Listener {
@Test public void word{
World w= mock(World.class);
w.addListener(this);
...
...
}
}
interface Listener {
void doAction();
}
システムはモックではトリガーされません。
上記のシステム状態を示し、それに応じてアサーションを行います。
ベストアンサー1
Mockitoを見てみましょうAPIドキュメントリンク先のドキュメントに記載されているように (ポイント # 12)、 Mockito フレームワークのdoThrow()
、doAnswer()
、doNothing()
のdoReturn()
メソッド ファミリのいずれかを使用して、void メソッドをモックできます。
例えば、
Mockito.doThrow(new Exception()).when(instance).methodName();
またはフォローアップ行動と組み合わせたい場合は、
Mockito.doThrow(new Exception()).doNothing().when(instance).methodName();
setState(String s)
以下は World クラスのsetter をモックすることを検討していると仮定すると、メソッドを使用doAnswer
して をモックするコードですsetState
。
World mockWorld = mock(World.class);
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(mockWorld).setState(anyString());