gpt4 book ai didi

java - Android JUnit 中模拟方法调用的结果为 null

转载 作者:行者123 更新时间:2023-12-02 02:22:43 25 4
gpt4 key购买 nike

我正在尝试模拟在另一个函数中调用的函数。但我得到的最终结果为 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() code> 但调用 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);");

有关 spy Activity 的更多详细信息(又名部分模拟)here .

关于java - Android JUnit 中模拟方法调用的结果为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com