如何在使用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);

}

}

}

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

回答:

如果您确实想要

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

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

如果需要确保filterDataProvider.getPossibleCountries(startDate,

newEndDate)已使用期望的参数调用了该方法,则需要使用verify

该代码将是这样的:

@RunWith(MockitoJUnitRunner.class)

public class FilterDataControllerTest {

@Mock

FilterDataProvider filterDataProvider;

@InjectMocks

FilterDataController controller;

@Test(expected = ValueNotAllowedException.class)

public void testGetPossibleFilterDataIncorrectDates() {

controller.getPossibleFilterData(new Date(1L), new Date(0L));

}

@Test

public void testGetPossibleFilterDataCorrectDates() {

// Make the mock returns a list of fake possibilities

Mockito.when(

filterDataProvider.getPossibleCountries(

Mockito.anyObject(), Mockito.anyObject()

)

).thenReturn(Arrays.asList("foo", "bar"));

ResponseEntity<Object> response = controller.getPossibleFilterData(

new Date(0L), new Date(1L)

);

Assert.assertEquals(HttpStatus.OK, response.getStatusCode());

// Make sure that

// filterDataProvider.getPossibleCountries(new Date(0L), new Date(1L))

// has been called as expected

Mockito.verify(filterDataProvider).getPossibleCountries(

new Date(0L), new Date(1L)

);

// Test response.getBody() here

}

@Test

public void testGetPossibleFilterDataEqualDates() {

// Make the mock returns a list of fake possibilities

Mockito.when(

filterDataProvider.getPossibleCountries(

Mockito.anyObject(), Mockito.anyObject()

)

).thenReturn(Arrays.asList("foo", "bar"));

// Call the controller with the same dates

ResponseEntity<Object> response = controller.getPossibleFilterData(

new Date(1L), new Date(1L)

);

Assert.assertEquals(HttpStatus.OK, response.getStatusCode());

Mockito.verify(filterDataProvider).getPossibleCountries(

new Date(1L), new Date(TimeUnit.DAYS.toMillis(1))

);

// Test response.getBody() here

}

}

以上是 如何在使用Mockito和JUnit的方法中检查if语句? 的全部内容, 来源链接: utcz.com/qa/425856.html

回到顶部