【发布时间】:2018-08-31 10:19:26
【问题描述】:
其实我正在尝试做 UT 的波纹管方法:
@Override
public Reservation findReservation(Long id) {
RestTemplate restTemplate = new RestTemplate();
Reservation reservation = restTemplate.getForObject(RESERVATION_REST_URL+id, Reservation.class);
return reservation;
}
我正在做 UT,如下所示:
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testFindReservation(){
Reservation reservation = new Reservation();
reservation.setId(1000l);
reservation.setCheckiIn(true);
reservation.setNumberOfBags(10);
when(restTemplate.getForObject("http://localhost:8080/flightreservation/reserva
tions/1000", Reservation.class))
.thenReturn(reservation);
Reservation res = reservationRestClient.findReservation(1000l);
Assert.assertNotNull(res);
}
但它给出了错误,据我了解,它没有正确模拟,不知何故 RestTemplate 试图调用真正的 api 而不是模拟。
ResourceAccessException: I/O error on GET request for http://localhost:8080/flightreservation/reserva
tions/1000
服务类:-
@Service
public class ReservationRestServiceImpl implements ReservationRestService {
private static final String RESERVATION_REST_URL = "http://localhost:8080/flightreservation/reservations/";
private final RestTemplate restTemplate;
public ReservationRestServiceImpl(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
@Override
public Reservation fetchReservationByPnr(Long id) {
Reservation reservation = restTemplate.getForObject(RESERVATION_REST_URL+id, Reservation.class);
return reservation;
}
}
而Test File如下,在testfile中Mocking RestTemplateBuilder后,给出了NLP。
@RunWith(SpringRunner.class)
//@AutoConfigureWebClient
@SpringBootTest(classes = { WebcheckinApplication.class })
public class WebcheckinApplicationTests {
private ReservationRestServiceImpl reservationRestServiceImpl;
@Mock
private RestTemplateBuilder restTemplateBuilder;
@Before
public void setUp() throws Exception {
reservationRestServiceImpl = new ReservationRestServiceImpl();
MockitoAnnotations.initMocks(this);
}
@Test
public void contextLoads() {
}
@Test
public void testFindReservation(){
Reservation reservation = new Reservation();
reservation.setId(1000l);
reservation.setCheckiIn(true);
reservation.setNumberOfBags(10);
RestTemplateBuilder builder = mock(RestTemplateBuilder.class);
reservationRestServiceImpl.setBuilder(builder);
reservationRestServiceImpl.init();
when(builder.build().getForObject("http://localhost:8080/flightreservation/reservations/1000", Reservation.class))
.thenReturn(reservation);
Reservation res = reservationRestServiceImpl.fetchReservationByPnr(1000l);
Assert.assertNotNull(res);
//assertEquals("{message : 'under construction'}", result);
}
}
【问题讨论】:
标签: spring spring-boot mockito spring-test