jmockでunexpected invocationエラー
3346 ワード
リモートサービスインタフェース
戻り値カプセル化オブジェクト
サービスクラス
jmockシミュレーションテスト
エラーの実行:
と書く
unexpected invocation: morganService.findMemberById()
expectations:
expected once, never invoked: morganService.findMemberById()
parameter 0 did not match:, because was ; returns
what happened before this: nothing!
…………
…………
観察エラー:
com.jmockTest.Query@14a8cd1
com.jmockTest.Query@e0b6f5
2つのQueryオブジェクトの参照があり、1つの問題を説明します.Queryというクラスはnewに2回、RealServiceTestというクラスではnewに1回、RealServiceでもnewに1回があります.
jmockが使用するエージェントメカニズムは、テストクラスを実行するときにパラメータ値が一致せず、エラーが発生します.
ソリューション:http://www.jmock.org/cheat-sheet.html
使用:oneOf(remoteService).findMemberById(with(any(Query.class))); この文は問題を解決する.
public interface RemoteService {
public BaseResult findMemberById(Query query);
public String addMethod();
}
戻り値カプセル化オブジェクト
public class BaseResult {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
サービスクラス
public class RealService {
private RemoteService remoteService;
public void doExecute(String memberId) {
BaseResult apple = null;
Query query = new Query(memberId);
apple = getRemoteService().findMemberById(query);
System.out.println(apple);
}
public RemoteService getRemoteService() {
return remoteService;
}
public void setRemoteService(RemoteService remoteService) {
this.remoteService = remoteService;
}
}
jmockシミュレーションテスト
public class RealServiceTest extends TestCase {
private RealService service = new RealService();
@Test
public void testDoExecute() {
Mockery context = new Mockery();
final RemoteService remoteService = context.mock(RemoteService.class);
final BaseResult result = new BaseResult();
final Query query = new Query("test");
result.setName("apple");
context.checking(new Expectations() {
{
oneOf(remoteService).findMemberById(query);
will(returnValue(result));
}
});
service.setRemoteService(remoteService);
service.doExecute("test120");
context.assertIsSatisfied();
}
}
エラーの実行:
と書く
unexpected invocation: morganService.findMemberById(
expectations:
expected once, never invoked: morganService.findMemberById(
parameter 0 did not match:
what happened before this: nothing!
…………
…………
観察エラー:
com.jmockTest.Query@14a8cd1
com.jmockTest.Query@e0b6f5
2つのQueryオブジェクトの参照があり、1つの問題を説明します.Queryというクラスはnewに2回、RealServiceTestというクラスではnewに1回、RealServiceでもnewに1回があります.
jmockが使用するエージェントメカニズムは、テストクラスを実行するときにパラメータ値が一致せず、エラーが発生します.
ソリューション:http://www.jmock.org/cheat-sheet.html
:
To define looser constraints, specify all arguments as matchers within with clauses:
allowing (calculator).add(with(any(int.class)), with(any(int.class)));
使用:oneOf(remoteService).findMemberById(with(any(Query.class))); この文は問題を解決する.