2010-09-21 122 views
4

如果我有以下方法:模擬對象的創建

public void handleUser(String user) { 

    User user = new User("Bob"); 
    Phone phone = userDao.getPhone(user); 
    //something else 
} 

當我測試這個使用EasyMock的嘲笑,反正是有,我可以測試用戶參數我路過到我userDAO的模擬像這樣的:

User user = new User("Bob"); 
EasyMock.expect(userDaoMock.getPhone(user)).andReturn(new Phone()); 

當我試圖運行上述測試,它抱怨意想不到的方法調用我假設,因爲在方法創建的actualy用戶是不一樣的對視了一眼,我傳遞...我正確嗎?

或者是我可以測試我傳遞到userDAO的參數最嚴格的方法就是:

EasyMock.expect(userDaoMock.getPhone(EasyMock.isA(User.class))).andReturn(new Phone()); 
+0

你的'User'類是否有'equals'方法? – 2010-09-21 22:53:53

回答

3

你是正確的,意想不到的方法調用被拋出,因爲User對象是預期之間的不同並實際撥打getPhone

正如@勞倫斯 - 貢薩爾維斯提到的評論,如果User有一個有用的方法equals,您可以使用EasyMock.eq(mockUser)getPhone預期的調用內應檢查其兩個User對象是相等的。

查看EasyMock Documentation,具體參見「靈活的期望與參數匹配器」一節。

+0

因此,如果我爲用戶實現了equals方法,那麼我可以通過我的userMock,還是仍然必須使用EasyMock.eq(mockUser),就像您已經提出的一樣實現了equals? – Glide 2010-09-22 17:17:01

+0

如果用戶等於方法比較名稱(鮑勃),然後通過用戶mockUser =新用戶(「鮑勃」)創建預期的方法; EasyMock.expect(userDaoMock.getPhone(EasyMock.eq(mockUser)))andReturn(new Phone());應該管用 – DoctorRuss 2010-09-23 10:33:50

1

您可以使用

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject())).andReturn(new Phone()); 

我想這應該解決您的問題。

0

通過Yeswanth Devisetty

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject(User.class))).andReturn(new Phone());

這給將解決這個問題的回答變化不大。