我有一个测试类,它有4-5个测试,其中一个测试从给定的URL中获取JSON。当运行一个特定测试时,输出如下所示
{"result":[{"result":[...]}]}
但是当我在测试类中运行所有测试时,上面提到的相同测试将返回以下JSON
{"result":[]}
我该如何解决?
当在浏览器中运行相同的URL时,获得的JSON是
{"result":[]}
JUNIT测试如下
@Test
public void test(){
PostcodeLookup.reverseGeocoding(0.629834723775309,51.7923246977375).limit(100).radius(2000).wideSearch(true).asjson();
}
以下网址是生成的网址
https://api.postcodes.io/postcodes?lon=0.629834723775309&lat=51.7923246977375&limit=100&radius=2000&widesearch=true
PostcodeLookup.java
public class PostcodeLookup {
public static PostcodeLookup reverseGeocoding(Double longitude, Double latitude) {
PostcodeLookup.longitude=longitude;
PostcodeLookup.latitude=latitude;
}
public static PostcodeLookup limit(int limit) {
PostcodeLookup.limit=limit;
}
public static PostcodeLookup radius(int radius) {
PostcodeLookup.radius=radius;
}
public static PostcodeLookup widesearch(boolean widesearch) {
PostcodeLookup.widesearch=widesearch;
}
public JSONObject asjson() throws MalformedURLException, IOException {
String url = "";
url = url.concat("lon=").concat(String.valueOf(longitude));
url = url.concat("&lat=").concat(String.valueOf(latitude));
if (getLimit() != 0) {
url = url.concat("&limit=").concat(String.valueOf(limit));
}
if (getRadius() != 0) {
url = url.concat("&radius=").concat(String.valueOf(radius));
}
if (isWideSearch()) {
url = url.concat("&widesearch=").concat(String.valueOf(wideSearch));
}
return JsonFetcher.urlToJson(new URL(LOOKUP_URL.concat(url)));
}
}
答案 0 :(得分:0)
这是由字段引起的:
com.postcode.io.initializers.ReverseGeocoding.json
它是由之前的测试初始化但从未清除过。值泄漏到下一个测试,改变了测试方法的行为。
您应该避免通过静态字段传递值。它看似方便或更具可读性,但实际上它会使您的代码难以遵循并容易出错。
而不是:
PostcodeLookup.reverseGeocoding(0.629834723775309, 51.7923246977375).limit(100).radius(2000).wideSearch(true).asjson()
只是做:
PostcodeLookup.reverseGeocoding(0.629834723775309, 51.7923246977375, 100, 2000, true);
通过方法参数传递所有参数。确保不要修改任何静态状态。