我有一个使用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:未模拟的org.json.JSONObject中的方法getJSONObject。有关详细信息,请参阅http://g.co/androidstudio/not-mocked。
正如您所看到的,我正在使用JSONObjets从json文件中获取数据。我们如何测试上述功能的结果?
由于
答案 0 :(得分:0)
为了使方法更容易测试,您可以将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();
答案 1 :(得分:0)
将此行添加到Android build.gradle 解决了这个问题:
testCompile "org.json:json:20140107"