2011-03-22 156 views
0

嗨我有這個測試失敗,並給我這個錯誤,失敗是在驗證......但我不明白爲什麼。爲什麼EasyMock測試失敗?

java.lang.AssertionError: Expectation failure on verify: debug(isA(java.lang.Object)): expected: 1, actual: 0

測試代碼是這樣的。

public void testLogInfo() 
    { 
     JDBCAppender jdbcAppender = createNiceMock(JDBCAppender.class); 
     Logger logger = createNiceMock(Logger.class); 
     LogDB logDB = new LogDB(null, null, null, LogDBDriver.ODBC, Level.TRACE); 
     logDB.setJdbcAppender(jdbcAppender); 
     logDB.setLogger(logger); 
     // method call 
     logger.info(isA(Object.class));  
     expectLastCall().once(); 
     // replay 
     replay(logger); 
     replay(jdbcAppender); 
     // verify method call 
     logDB.log(Level.INFO, "10", "Server", "admin", "shortext", "longText","className","methodName"); 
     verify(logger); 
    } 
+1

似乎有一個預期的但未實現的調試()調用。除了您最初想要測試的信息日誌外,LogDB是否會在任何設置器中執行任何調試日誌記錄? – 2011-03-22 21:28:56

+0

不知道我理解你的問題...... LogDB負責將其插入到數據庫中,但由於這是一個模擬,LogDB構造函數調用中沒有DB數據,因此您可以看到,這是否會成爲問題? – 2011-03-22 21:41:42

+1

LogDB是被測試的類。 jdbcAppender和logger是mock,並且這些被設置爲logDB實例。我的問題是,LogDB類是否在setLogger方法中調用logger.debug()?如果錯誤消息真的說明了我的想法,即在調用replay(logger)之前調用了logger.debug(),那麼logDB.setLogger似乎是可以調用logger.debug()的唯一地方。 – 2011-03-22 22:07:18

回答

2

剛剛發現出了什麼問題。

該方法調用LogDB.log沒有調用Logger.info(Object)它是callig Logger.log(Priority,Object)。

這就是爲什麼在重播後,狀態不一樣,因爲它期待着一種呼叫和接收另一種呼叫。

+0

那麼爲什麼在測試用例中調用logger.info()時錯誤狀態表明調用'debug()'缺失? – 2011-03-23 18:50:32