如何使用JSONObjects编写使用junit mockito的本地测试



我有一个使用 JSONObject 的函数,我需要测试它。这是我的代码:

这是我想要测试的代码:

public String getJsonData() {
try {
    InputStream is = mContext.getAssets().open("chartInfo.json");
    int size = is.available();
    byte[] buffer = new byte[size];
    if (is.read(buffer) > 0)
        jsonString = new String(buffer, "UTF-8");
    is.close();
} catch (IOException ex) {
    ex.printStackTrace();
    return null;
}
return jsonString;
}
public String getChartTypeJS() {
jsonString = getJsonData();
try {
    JSONObject jsonObject = new JSONObject(jsonString);
    JSONObject javascriptEvent_JsonObject = jsonObject.getJSONObject("javascript_events");
    return javascriptEvent_JsonObject.getString("chartType");
} catch (JSONException e) {
    e.printStackTrace();
}
return "";
}

我的测试代码:

@RunWith(MockitoJUnitRunner.class)
public class LoadJsonData_Test {
@Spy
private LoadJsonData loadJsonData;
@Test
public void getChartTypeJS_test() {
    String jsonStr = "";
    try {
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("chartInfo.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        if (is.read(buffer) > 0)
            jsonStr = new String(buffer, "UTF-8");
        is.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    doReturn(jsonStr).when(loadJsonData).getJsonData();
    assertEquals(loadJsonData.getChartTypeJS(), "javascript:setChartSeriesType(%d);");
    }
}

抛出的错误:java.lang.RuntimeException: Method getJSONObject in org.json.JSONObject not mocked.有关详细信息,请参阅 http://g.co/androidstudio/not-mocked。

如您所见,我正在使用JSONObjets从json文件中获取数据。我们如何测试上述函数的结果?

谢谢

将这一行添加到 Android build.gradle 解决了这个问题:

testCompile "org.json:json:20140107"

为了使该方法更易于测试,您可以将jsonString作为参数传递:

public String getChartTypeJS(String jsonString) {
    try {
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONObject javascriptEvent_JsonObject = jsonObject.getJSONObject("javascript_events");
        return javascriptEvent_JsonObject.getString("chartType");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return "";
}

那么在你的测试中,你不需要这一行:

doReturn(jsonStr).when(loadJsonData).getJsonData();

相关内容

  • 没有找到相关文章

最新更新