我有以下 MyRestService
类方法:
public Address getOfficeLocation(String id){
RestClient restClient = new RestClient(tokenOauthUrl);
String url = String.format(officeAddress, id);
JSONObject jsonObject = restClient.get(url, null, credentials);
return AddressParser.parseOfficeAddress(jsonObject);
}
我想调用restClient.get
。我写了以下测试:
@Mock
private MyRestService myService;
@Mock
private RestClient restClient;
@Test
public void getOfficeLocationTest(){
myService.getOfficeLocation(any(String.class));
Mockito.verify(restClient, Mockito.times(1)).get(any(String.class), any(MultivaluedMap.class), any(Credentials.class));
}
我认为这是完全错误的做法。我测试失败:想要但未调用:实际上,与此模拟的交互为零。
如何使我的方法可测试?
最佳答案
你的 SUT 应该是这样的
class YourClass {
@Inject
private RestClient restClient; //Injecting RestClient
public Address getOfficeLocation(String id){
String url = String.format(officeAddress, id);
JSONObject jsonObject = restClient.get(url, null, credentials);
return AddressParser.parseOfficeAddress(jsonObject);
}
}
你的测试代码有
@Mock
private MyRestService myService;
我相信 MyRestService 是您的待测系统(SUT),因此不应模拟它,而必须创建它的新对象
也许是这样的
@InjectMocks
private MyRestService myService;
这会将模拟的 RestClient
注入(inject)到 MyRestService
关于java - Mockito:仅使用局部变量的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997163/