2012-01-05 35 views
3

與我的地方嘲笑,我得到的錯誤:EasyMock的給予意想不到的結果,稱預計1,實際0

redisDao.someMethod(notNull(), notNull()): expected 1, actual 0 

如果我在調試模式跟蹤時要取出模擬設置,那麼,它進入方法redisDao.someMethod,然後以空指針異常失敗。

這對我沒有意義,不知道如何解決這個問題?

mockMaker = EasyMock.createStrictControl(); 
redisDaoMock = mockMaker.createMock(redisDao.class); 

userService.setRedisDao(redisDaoMock); 

expect(redisDaoMock.someMethod(EasyMock.<String>notNull(), EasyMock.<String>notNull())).andReturn(someReturn); 

mockMaker.replay(); 
mockMaker.verify(); 

userController.get(request, response); 

// assertions here 
+3

我不能完全肯定,但不應該你把回放和驗證或驗證只是在方法調用之後? – 2012-01-05 04:43:22

+0

好,我認爲在方法調用後,verify()會繼續。它驗證你所期望的是被調用的。 – Logan 2012-01-05 04:50:15

+0

@srikanthradix這是它的感謝。 – Blankman 2012-01-06 03:04:05

回答

7

我覺得你的問題是,你正在創建一個「嚴」模擬對象,並期望你叫你把方法的期望()。如果你的代碼沒有執行預期的方法調用,它會給你預期的1個實際的0消息。

您可以使用EasyMock.createNiceMock()而不是createStrictControl,這應該消失。或者只是確保你的代碼調用你在Expect調用中告訴它的方法。

您可能還需要在期望的調用結束時添加一個.anytimes(),以便即使未調用它,也可以。

This page has some good explanations and even has your error

+1

+1在不同的方法調用中添加.anytimes()屬於同一個模擬對象,這對我來說並不適用。 – user1563633 2013-12-03 11:14:59

相關問題