2 回答
TA贡献1869条经验 获得超4个赞
在您的第一个示例中,@InjectMocks注释导致的实例Controller被注入mocked DatabaseModel。
在你的第二个例子中,你构造了Controller这样的......
controller=new Controller();
...但是您永远不会将模拟注入Database Model到Controller. 所以,当你调用controller.getAllActivites()你的控制器时,永远不要使用模拟的DatabaseModel. 如果您可以DatabaseModel将Controller. 例如:
testDB=mock(DatabaseModel.class);
// constructor injection
controller=new Controller(testDB);
// setter injection
controller=new Controller();
controller.setDatabaseModel(testDB);
注意:即使您verify(testDB).getActivites()从 setup 方法中删除,除非您实际将模拟对象提供DatabaseModel给controller.
TA贡献1936条经验 获得超7个赞
您正在第二版verify中的方法中执行...setup
@Before
public void setup() {
jsonObj1=new JSONObject();
jsonObj1.put("name", "Bar");
testArr=new JSONArray();
testArr.put(jsonObj1);
controller=new Controller();
testDB=mock(DatabaseModel.class);
when(testDB.getActivites()).thenReturn(testArr);
verify(testDB).getActivites(); // REMOVE THIS LINE
}
此时不会调用任何内容,因此会出现错误。
您可能想将此行移到您的测试方法中,例如...
@Test
public void testServerCon(){
ArrayList<String> testServer=new ArrayList<>();
testServer.add("Bar");
assertEquals(testServer, controller.getAllActivites());
verify(testDB).getActivites();
}
添加回答
举报
