2 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
在您的第一個(gè)示例中,@InjectMocks注釋導(dǎo)致的實(shí)例Controller被注入mocked DatabaseModel。
在你的第二個(gè)例子中,你構(gòu)造了Controller這樣的......
controller=new Controller();
...但是您永遠(yuǎn)不會(huì)將模擬注入Database Model到Controller. 所以,當(dāng)你調(diào)用controller.getAllActivites()你的控制器時(shí),永遠(yuǎn)不要使用模擬的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 方法中刪除,除非您實(shí)際將模擬對(duì)象提供DatabaseModel給controller.

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
您正在第二版verify中的方法中執(zhí)行...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
}
此時(shí)不會(huì)調(diào)用任何內(nèi)容,因此會(huì)出現(xiàn)錯(cuò)誤。
您可能想將此行移到您的測(cè)試方法中,例如...
@Test
public void testServerCon(){
ArrayList<String> testServer=new ArrayList<>();
testServer.add("Bar");
assertEquals(testServer, controller.getAllActivites());
verify(testDB).getActivites();
}
添加回答
舉報(bào)