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();
}
添加回答
舉報