[英]Junit test of void method
我正在測試一種返回類型為 void 且帶有一個參數的方法。 我試圖至少獲得一些代碼覆蓋率。 這是我正在測試的一種方法:
@Service
public class VaultService {
private final ProductRepository repository;
private final DatabaseService databaseService;
public VaultService(
@Autowired BuildProperties buildProperties,
ProductRepository repository,
DatabaseService databaseService
) {
logger.info("Creating service");
this.repository = repository;
this.databaseService = databaseService;
}
protected void checkVaultResponseErrors(VaultResponse vaultResponse) {
if (vaultResponse.responseStatus != ResponseStatus.SUCCESS) {
vaultResponse.errors.forEach(error -> {
if (vaultResponse.responseStatus.equals(ResponseStatus.EXCEPTION)) {
throw new VaultException(error.getMessage());
}
if (vaultResponse.responseStatus.equals(ResponseStatus.FAILURE)) {
throw new VaultFailure(error.getMessage());
}
});
}
}
VaultResponse class 看起來像這樣
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class VaultResponse {
@JsonProperty("responseStatus")
public ResponseStatus responseStatus;
@JsonProperty("errors")
public List<Error> errors;
}
這是我的測試。 我收到Mockito.verify
錯誤,但代碼的 rest 也沒有得到任何覆蓋。 我顯然做錯了什么。
@Test
void should_check_vaultResponse_for_errors() {
VaultService spyService = Mockito.spy(vaultService);
VaultResponse vaultResponse = new VaultResponse();
ResponseStatus status = ResponseStatus.SUCCESS;
List<Error> error = new ArrayList<>();
vaultResponse.setResponseStatus(status);
vaultResponse.setErrors(error);
doThrow(IllegalArgumentException.class)
.when(spyService).checkVaultResponseErrors(vaultResponse);
doNothing().when(spyService).checkVaultResponseErrors(vaultResponse);
verify(spyService, times(1)).checkVaultResponseErrors(vaultResponse);
}
您的測試方法清楚地表明您要測試checkVaultResponseErrors
方法。 這意味着你絕對不應該嘲笑它。 您可以模擬使其工作所需的任何東西,但不能模擬方法本身。
在我看來,要編寫三個測試:
// create VaultResponse without errors; you have that now
assertDoesNotThrow(() -> vaultService.checkVaultResponseErrors(vaultResponse));
// create VaultResponse with status EXCEPTION
VaultException thrown = assertThrows(VaultException.class,
() -> vaultService.checkVaultResponseErrors(vaultResponse));
// you can now assert that thrown is what you expect
// create VaultResponse with status FAILURE
VaultFailure thrown = assertThrows(VaultFailure.class,
() -> vaultService.checkVaultResponseErrors(vaultResponse));
// you can now assert that thrown is what you expect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.