簡體   English   中英

jUnit + jMock和log4j

[英]jUnit + jMock and log4j

我已經完成了在其他程序員創建的程序上執行JUnit + JMock的任務。 大多數類都有這個靜態字段記錄器,即:

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");來完成手動log4j配置DOMConfigurator.configure("log4j.xml"); setUp()方法內部,但我仍然得到上面相同的錯誤消息。

問題是:

  • 如何在調用其他使用LogFactory.getLog的類的類中運行單元測試+ 模擬
  • 我應該在我的setup方法中配置log4j,以便模擬和單元測試運行時沒有異常嗎?
  • 我該怎么辦

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

在Maven項目中,第二個選項很簡單,因為您只需要在test / resources文件夾中創建log4j.properties。

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

我遇到的問題是:
1.消息“setFile(null,true)調用失敗”的FileNotFoundException異常
2. jMock意外調用錯誤

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

獲得的經驗教訓:如果您在log4j執行中遇到FileNotFoundException,請嘗試將-Dlog4j.debug作為VM參數,以查看log4j在哪里提取配置文件。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM