我试图模拟在另一个函数中调用的函数。但我得到的最终结果是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 "";
}
我做错了什么?
谢谢
你正在嘲笑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);");
有关间谍(又名部分模拟(的更多详细信息 这里.