2013-02-02 22 views
0

當使用JUnit我們通過用於登錄作爲JVM屬性的目錄。這可以在命令行和Eclipse中正常工作。但是,當我們將同一個屬性傳遞給Buildr測試任務時,它不起作用。Buildr JVM屬性的JUnit設置在JVM內部而不是外部

test.using :properties => { :"server.name" => "tester", :"log.dir" => log_dir} 

我們知道爲什麼會發生這種情況。該屬性是從JVM內部而不是外部設置的。這意味着在運行時(當加載靜態日誌記錄類時)該屬性尚未設置。如果我們稍後查詢屬性(從單元測試中說),那麼我們看到它被正確設置。

有誰知道解決方法?

順便說一句,我們使用log4j的,但問題是適用於需要訪問一個JVM財產Buildr設置任何靜態類。

回答

0

假設你使用JUnit,您可以確保測試的分叉JVM通過

test.using :fork => :once 

跑不過我認爲這是默認的行爲?你是否壓倒了這個? (見http://buildr.apache.org/languages.html

+0

是彼得,我們已經嘗試使用所有叉選項,但無濟於事。在從Ruby調用Java之前,我們遇到了類似的問題。看來Ruby會首先創建JVM,並在稍後設置屬性。但是這足以讓需要讀取JVM屬性的靜態類變得不可用。最明顯的解決方案是創建我們簡單地調用一個shell腳本來執行測試自己buildr的任務,但我想看看是否有之前走這路線buildr內的解決方案。 –

0

code定義log4j.properties文件的log.dir並通過將它構建文件

test.using :properties => { :"log.dir" => '/tmp'} 

我的設置是

  • buildr 1.4.7
  • 紅寶石1.9.3

hth