我有我应该测试的方法。代码(当然删减了部分):
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 语句是否正常工作。
原文由 Woland 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你真的想要一个 纯 单元测试而不是集成测试,你可以依靠注释
@Mock
来模拟你的服务FilterDataProvider
和@InjectMocks
to-84813-ject your mock into-to-84813-您的实例FilterDataController
。然后你可以提出 3 个测试:
ValueNotAllowedException
可以使用@Test(expected = ValueNotAllowedException.class)
开箱即用地进行测试。如果您需要确保
filterDataProvider.getPossibleCountries(startDate, newEndDate)
已使用您需要使用的预期参数调用verify
。代码将是这样的: