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