私はテストするべき方法があります。コード(もちろん、いくつかの部分がカットされた):MockitoとJUnitを使ってif文をチェックする方法は?
public class FilterDataController {
public static final String DATE_FORMAT = "yyyy-MM-dd";
@Autowired
private FilterDataProvider filterDataProvider;
@ApiOperation(value = "Get possible filter data",response = ResponseEntity.class)
@ApiResponses(value = {
@ApiResponse(...),
@ApiResponse(...)})
@RequestMapping(path = "...", method = RequestMethod.GET)
public ResponseEntity<Object> getPossibleFilterData(
@RequestParam(value = "startDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date startDate,
@RequestParam(value = "endDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date endDate) {
if (endDate.compareTo(startDate) == -1){
throw new ValueNotAllowedException("End date should be after or equal start date");
}
else {
Date newEndDate = endDate;
if (startDate.equals(endDate)){
newEndDate = new Date(endDate.getTime() + TimeUnit.DAYS.toMillis(1) - 1);
}
List<String> possibleCountries = Lists.newArrayList(filterDataProvider.getPossibleCountries(startDate, newEndDate));
return new ResponseEntity<>(new FilterResponse(possibleCountries),HttpStatus.OK);
}
}
}
質問:MockitoとJUnitを用いた方法getPossibleFilterData
にif文をチェックするにはどのように?メソッドに等しい日付を渡して、if文が正しく機能することを確認します。
以下の答えの多くで述べたように、テストでは実装を想定すべきではありません。メソッドをリファクタリングして正しい値を返すようにしたら、if文はまったく使用しませんか?それを仮定するのではなく、間違った値で_passを実行し、正しいexception_をキャッチしたときにのみテストをパスします。 –
@JeffBowmanアドバイスありがとうございます。コードのおかげで – Woland