我正在尝试使用mockito和junit测试一个void方法(该方法包含一个泛型参数)。我想使用doNothing()为这个方法,但运行后,测试将返回异常的方法与泛型参数和其他没有泛型参数,它的工作;
成功和错误的区别在于:我们用final来定义success方法,而不是error方法
例外情况:例外1:
不能在验证或验证之外使用参数匹配器。正确使用参数匹配器的示例:when(mock.get(anyInt().thenReturn(null); System. out. println(). println(); verify(mock).someMethod(contains(“foo”))
此外,这个错误可能会出现,因为你使用的参数匹配器的方法不能被模仿。以下方法 * 不能 * 被存根/验证:final/private/equals()/hashCode()。不支持在非公共父类上声明的Mocking方法。
Method to tests :
public class GreenWork {
@Autowired
Service service;
public void getDataResponses() {
ResponseEntity<DataDTO> responseEntity = restTemplate.exchange(
settings.getUrk(),
HttpMethod.GET,
null,
DataDTO.class);
if (responseEntity.getStatusCode().is4xxClientError()) {
ErrorData errorData = new ErrorData();
errorData.setMessage("error loading");
service.error("corId", errorData, "otherId");
} else {
service.success("corId", responseEntity.getBody(), "otherId");
}
}
}
**Service.java**
public final void success(
final String corId,
final T t, // Generic class
final String otherud)
throws Exception {
......
restTemplate.exchange(
"url"),
entity,
Void.class);
}
public void error(
final String corId,
final ErrorData errorData,
final String otherud)
throws Exception {
......
restTemplate.exchange(
"url"),
entity,
Void.class);
}
My Junit tests :
@InjectMocks
private GreenWork greenWork;
@Test
public void shoulSuccessCallbak() {
doNothing().when(service).success(anyString(), any(), anyString()); // Throw an exception Exception 1
doNothing().when(service).success(anyString(), any(GrayDTO.class), anyString()); // With this I got also the same Exception
doNothing().when(service).error("corId", any(ErrorData.class), "xId"); // No error no exception .. Work
greenWork.getDataResponses();
}
1条答案
按热度按时间hjzp0vay1#
从服务中删除
final
修改器到