如何在使用Mockito和JUnit的方法中检查if语句?

问题描述

如果您确实想要 单元测试而不是集成测试,则可以依靠注释@Mock来模拟服务FilterDataProvider并将@InjectMocks模拟插入到的实例中FilterDataController

  1. 日期正确无误的一项测试,
  2. 日期正确但相等的另一个
  3. 最后一个日期不正确的日期将抛出ValueNotAllowedException,可以使用进行开箱测试 @Test(expected = ValueNotAllowedException.class)

如果需要确保filterDataProvider.getPossibleCountries(startDate, newEndDate)已使用期望的参数调用了该方法,则需要使用verify

代码将是这样的:

  1. @RunWith(MockitoJUnitRunner.class)
  2. public class FilterDataControllerTest {
  3. @Mock
  4. FilterDataProvider filterDataProvider;
  5. @InjectMocks
  6. FilterDataController controller;
  7. @Test(expected = ValueNotAllowedException.class)
  8. public void testGetPossibleFilterDataIncorrectDates() {
  9. controller.getPossibleFilterData(new Date(1L), new Date(0L));
  10. }
  11. @Test
  12. public void testGetPossibleFilterDataCorrectDates() {
  13. // Make the mock returns a list of fake possibilities
  14. Mockito.when(
  15. filterDataProvider.getPossibleCountries(
  16. Mockito.anyObject(), Mockito.anyObject()
  17. )
  18. ).thenReturn(Arrays.asList("foo", "bar"));
  19. ResponseEntity<Object> response = controller.getPossibleFilterData(
  20. new Date(0L), new Date(1L)
  21. );
  22. Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
  23. // Make sure that
  24. // filterDataProvider.getPossibleCountries(new Date(0L), new Date(1L))
  25. // has been called as expected
  26. Mockito.verify(filterDataProvider).getPossibleCountries(
  27. new Date(0L), new Date(1L)
  28. );
  29. // Test response.getBody() here
  30. }
  31. @Test
  32. public void testGetPossibleFilterDataEqualDates() {
  33. // Make the mock returns a list of fake possibilities
  34. Mockito.when(
  35. filterDataProvider.getPossibleCountries(
  36. Mockito.anyObject(), Mockito.anyObject()
  37. )
  38. ).thenReturn(Arrays.asList("foo", "bar"));
  39. // Call the controller with the same dates
  40. ResponseEntity<Object> response = controller.getPossibleFilterData(
  41. new Date(1L), new Date(1L)
  42. );
  43. Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
  44. Mockito.verify(filterDataProvider).getPossibleCountries(
  45. new Date(1L), new Date(TimeUnit.DAYS.toMillis(1))
  46. );
  47. // Test response.getBody() here
  48. }
  49. }

解决方法

我有应该测试的方法。代码(当然,某些部分被剪切):

  1. public class FilterDataController {
  2. public static final String DATE_FORMAT = "yyyy-MM-dd";
  3. @Autowired
  4. private FilterDataProvider filterDataProvider;
  5. @ApiOperation(value = "Get possible filter data",response = ResponseEntity.class)
  6. @ApiResponses(value = {
  7. @ApiResponse(...),@ApiResponse(...)})
  8. @RequestMapping(path = "...",method = RequestMethod.GET)
  9. public ResponseEntity<Object> getPossibleFilterData(
  10. @RequestParam(value = "startDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date startDate,@RequestParam(value = "endDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date endDate) {
  11. if (endDate.compareTo(startDate) == -1){
  12. throw new ValueNotAllowedException("End date should be after or equal start date");
  13. }
  14. else {
  15. Date newEndDate = endDate;
  16. if (startDate.equals(endDate)){
  17. newEndDate = new Date(endDate.getTime() + TimeUnit.DAYS.toMillis(1) - 1);
  18. }
  19. List<String> possibleCountries = Lists.newArrayList(filterDataProvider.getPossibleCountries(startDate,newEndDate));
  20. return new ResponseEntity<>(new FilterResponse(possibleCountries),HttpStatus.OK);
  21. }
  22. }
  23. }

问题:如何在getPossibleFilterData使用Mockito和JUnit的方法中检查if语句?我想将相等的日期传递给方法,然后检查我的if语句是否正常工作。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”