从URL获取的JSON不同

时间:2016-08-14 20:55:56

标签: java json

我有一个测试类,它有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)));
}
}

1 个答案:

答案 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);

通过方法参数传递所有参数。确保不要修改任何静态状态。

相关问题