问题描述
我正在尝试为调用第三方API的服务编写测试用例。我的服务代码如下:
public List<FoodTruckDto> listFoodTruckLocations(Double givenLatitude,Double givenLongitude) throws Exception{
log.info("Given Latitude => "+givenLatitude+" Given Longitude => "+givenLongitude);
List<FoodTruckDto> foodTrucks = new ArrayList<>();
HttpResponse<List<FoodTruckDto>> foodTrucksResponse = Unirest.get(locationUrl)
.queryString("facilitytype","Truck")
.asObject(new GenericType<List<FoodTruckDto>>(){});
if (foodTrucksResponse.getStatus() == HttpStatus.OK) {
foodTrucks = foodTrucksResponse.getBody();
foodTrucks.sort(new SortingLocations(givenLatitude,givenLongitude));
} else {
UnirestParsingException ex = foodTrucksResponse.getParsingError().get();
log.error("Error Message => "+ex.getMessage());
log.error("Error Cause => "+ex.getCause());
log.error("Error Original Body => "+ex.getoriginalBody());
throw new CustomException("exc001");
}
return foodTrucks;
}
服务方法的测试代码如下,该代码使用RestTemplate和MockRestServiceServer:
@SpringBoottest
public class LocationServiceImpltest {
@Mock
private RestTemplate restTemplate;
private MockRestServiceServer mockServer;
@MockBean
private LocationService locationService;
@BeforeEach
public void setUp() {
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void testListFoodTruckLocations() throws Exception {
Gson gson = new Gson();
List<FoodTruckDto> foodTruckResult = new ArrayList<>();
this.mockServer.expect(ExpectedCount.once(),requestTo("https://data.sfgov.org/resource/rqzj-sfat.json?facilitytype=Truck"))
.andExpect(method(HttpMethod.GET)).andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).body(gson.toJson(foodTruckResult)));
List<FoodTruckDto> foodTruckDtos = locationService.listFoodTruckLocations(233.3,-131.02);
mockServer.verify();
assertthat(foodTruckDtos).isEqualTo(foodTruckResult);
}
}
测试代码在mockServer.verify()
处失败。这与Unirest
和RestTemplate
有什么关系吗?不能使用RestTemplate测试使用Unirest的服务?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)