public class AddressRetriever{
private Http http; //将外部依赖以构造函数的方式引入,对单元测试更加友好
public AddressRetriever(Http http){
this.http = http;
}
public Address retrieve(double latitude, double longitude) throws IOException, ParseException{
String params = String.format("lat=%.6flon=%.6f", latitude, longitude);
String response = http.get("http://open.mapquestapi.com/nominatim/v1/reverse?format=json&"+params);
JSONObject obj = (JSONObject)new JSONParse().parse(reponse);
//...
}
}
Http http = new Http(){
@Override
public String get(String uri) throws IOException{
return "{\"address\":{" + "\"house_number\":\"324\"," + "\"road\":\"North Tejon Street\","
}
}
public class AddressRetrieverTest {
@Test
public void answersAppropriateAddressForValidCoordinates() throws IOException, ParseException {
Http http = mock(Http.class);
when(http.get(contains("lat=38.000000&lon=-104.000000"))).thenReturn(
"{\"address\":{" + "\"house_number\":\"324\","
// ...
+ "}");
AddressRetriever retriever = new AddressRetriever(http);
Address address = retriever.retrieve(38.0,-104.0);
assertThat(address.houseNumber, equalTo("324"));
}
public class AddressRetrieverTest{
@Mock
private Http http;
@InjectMocks
private AddressRetriever retriever;
@Before
public void createRetriever(){
retriever = new AddressRetriever();
MockitoAnnotations.initMocks(this);
}
@Test
public void answersAppropriateAddressForValidCoordinates() throws IOException, ParseException{
when(http.get(contains("lat=38.000000&lon=-104.000000")))
.thenReturn("{\"address\":{"
+ "\"house_number\":\"324\","
//...
}
}
原文:https://www.cnblogs.com/jiyuqi/p/13841602.html