2012-01-23 64 views
4

我已經給出了一個任務,對其他程序員創建的程序執行JUnit + JMock。班裏大部分學生有這個靜態字段記錄儀,即:jUnit + jMock和log4j

static Log logger = LogFactory.getLog(SomeClass.class.getName()); 

我通過實例它我setUp()方法內創建SomeClass的的一個實例。當我運行我的JUnit類我收到此錯誤信息:

log4j:ERROR setFile(null,true) call failed. 
java.io.FileNotFoundException: (No such file or directory) 

我試圖通過調用DOMConfigurator.configure("log4j.xml");setUp()方法內做人工log4j的配置,但我仍然得到上述同樣的錯誤消息。

的問題是:

  • 我如何運行我的單元測試+中調用使用LogFactory.getLog
  • 我應該配置log4j我的設置方法裏面,這樣其他類的類嘲諷嘲笑和單元測試運行沒有例外?
  • 我該怎麼做。

回答

1

其實有兩種類型的問題,我認爲是一個,jUnit中的log4j問題。即使log4j配置不正確,實際上你仍然可以繼續使用jUnit + jMock,它會拋出一個異常,但不會停止jUnit的執行。

,我已經是這個問題:
1. FileNotFoundException異常異常與信息 「setFile(NULL,TRUE)調用失敗」
2. JMock的意外調用錯誤

我解決了1號(即使我能仍然繼續進行單元測試,即使使用log4j異常)通過將虛擬變量置爲-Dlog4j.configuration=file:/C:/log4j/log4j.xml。我得到一個異常,因爲它在編譯目錄(編譯java類的默認輸出文件夾)中使用了log4j.xml。該log4j有這個參數<param name="File" value="${error.file}"/>。所以log4j正在尋找一個文件名爲$ {error.file}(它不存在)的日誌文件。就像我上面所說的,我通過在上面加入VM參數來解決它。

獲得的經驗:如果在log4j執行中獲得FileNotFoundException,請嘗試將-Dlog4j.debug作爲VM參數,以查看log4j在何處拉取配置文件。

我通過完成我正在測試的方法內部的所有預期對象來解決數字2。雖然jMock的消息有點含糊不清。

獲得的經驗:意外的調用通常意味着您缺少測試方法中正在使用的單元測試方法中的對象或模擬對象。這也意味着你沒有設置對它試圖調用的對象的期望

4

你有兩個選擇......

在Maven項目,第二個選擇是容易的,因爲你只需要在您的測試/資源文件夾中創建一個log4j.properties。

+0

感謝您的答覆安德魯。我沒有選擇使用PowerMock,我需要堅持使用jMock。如果我使用屬性文件而不是xml版本,我使用log4j.xml會使DOMConfigurator.configure工作嗎? – Zorlac

+0

夥計們,我解決了我的問題。感謝您的迴應。 – Zorlac