我正在尝试模拟在另一个函数中调用的函数。但我得到的最终结果为null
。我试图模拟在实际函数中使用的第二个函数。
这是我的代码:
@RunWith(MockitoJUnitRunner.class)
public class LoadJsonData_Test {
@Mock
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();
}
when(loadJsonData.getJsonData()).thenReturn(jsonStr);
System.out.println(loadJsonData.getJsonData()); //Printing the data I wanted
assertEquals(loadJsonData.getChartTypeJS(),
"javascript:setChartSeriesType(%d);"); // loadJsonData.getChartTypeJS() returns null
}
我正试图测试的代码:
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 "";
}
我做错了什么?
由于
答案 0 :(得分:2)
您正在模仿LoadJsonData
,然后在其上调用两个方法:
getJsonData()
getChartTypeJS()
您可以在此处getJsonData()
创建对响应的期望:
when(loadJsonData.getJsonData()).thenReturn(jsonStr);
但由于模拟对getChartTypeJS()
的响应没有期望,因此该调用返回null:loadJsonData.getChartTypeJS()
。
看起来LoadJsonData
应该是Spy
而不是Mock
,因为这样可以模拟getJsonData()
,但会调用getChartTypeJS()
的实际实现。
例如:
@Spy
LoadJsonData loadJsonData;
// this wil tell Mockito to return jsonStr when getJsonData() is invoked on the spy
doReturn(jsonStr).when(loadJsonData.getJsonData());
// this will invoke the actual implementation
assertEquals(loadJsonData.getChartTypeJS(), "javascript:setChartSeriesType(%d);");
关于间谍活动的更多细节(又名部分嘲笑)here。