我正在尝试模拟对getJSONFile()的调用,该调用从json文件返回someJson对象。
public class NameClass{
public String getValues() throws Exception
{
HelpingClass e=new HelpingClass();
String name=" ";
String age=" ";
String gender=" ";
JSONObject json= e.getJSONFile();
json.getString("name");
json.getString("age");
json.getString("gender");
System.out.println("Request received is "+json);
------ I have some other logic with JSON received and return string...
}
}
这是我的getJSONFile()
public class HelpingClass{
public JSONObject getJSONFile() throws Exception
{
System.out.println("Getting JSON file");
File f = new File("src/main/resources/input.json");
JSONObject json ;
InputStream is = new FileInputStream(f);
String jsonTxt = IOUtils.toString(is);
json=new JSONObject(jsonTxt);
return json;
}
}
这是我的测试用例
@RunWith(MockitoJUnitRunner.class)
public class TestValues {
@InjectMocks NameClass names;
@Mock HelpingClass help;
@Test
public void testgetValues() throws Exception
{
//I am expecting this output
JSONObject addValues=new JSONObject();
addValues.put("name", "Rahul");
addValues.put("age", "30");
addValues.put("gender","male");
//this is what i am returning when help.getJSONFile is called
JSONObject json=new JSONObject();
json.put("name", "Rahul");
json.put("age", "30");
json.put("gender", "male");
//Mocking this call and returning my json
Mockito.when(help.getJSONFile()).thenReturn(json);
String s=names.getValues();
Assert.assertEquals(addValues.toString(),s);
}
}
现在不是返回创建的json,而是在文件中返回我的JSON,例如名字是Rohit年龄是28岁,性别是男性。
为什么这种嘲弄不起作用?从技术上讲,它应该调用mocked方法并在JSONObject类的json对象中返回值,即Rahul,30年和男性。
我哪里错了?
答案 0 :(得分:3)
如果你在方法中实例化HelperClass,那么@InjectMocks就不会工作。
你必须使它成为一个实例变量或使用你将模拟的getter:
public class NameClass{
public String getValues() throws Exception
{
HelpingClass e= getHelpingClass();
....
}
HelpingClass getHelpingClass(){
return new HelpingClass();
}
}
在你的测试中使用@Spy如下:
public class TestValues {
@InjectMocks
@Spy
NameClass names;
@Mock HelpingClass help;
@Test
public void testgetValues() throws Exception
{
doReturn(help).when(names).getHelpingClass();
Mockito.when(help.getJSONFile()).thenReturn(json);
...
}
}