2016-12-30 40 views
2

源編輯文件:的Java 8
IDE: Eclipse的
測試:的JUnit
生成工具: Maven的
包裝: WAR是它認爲不好的做法在src /測試/資源文件夾

我需要JUnit測試我的代碼,操縱Excel文件。我打算保留一些示例Excel文件src/test/resources文件夾。使用@Before我會在src/test/resources(帶有時間戳)內創建一個新文件夾,然後在其中複製示例Excel文件。然後測試將對這些文件進行操作,然後刪除測試的時間戳文件夾@After

我的問題是:

  1. 這是不好的做法,在這個目錄中修改文件考慮到它是代碼庫的一部分?

  2. 當我的代碼在使用maven的CI中運行時,這會產生影響嗎?

  3. 如果1的答案爲是,那麼是否有可取的替代方法。

回答

2

不好的做法。使用資源中的文件爲模板。這是一個使用

Path target = Files.createTemp... 
Files.copy(MyClass.class.getResourceAsStream("/..."), target); 

在一個臨時目錄中的結果將在未來的某個時刻進行清理,如果你想使複製它們。

在某些情況下,而不是臨時directoy,可以寫入目標構建目錄。例如爲你自己的Maven報告插件。但是對於上面的測試應該這樣做。

2

修改此目錄中的文件是不好的做法,因爲它是 代碼庫的一部分?

即使你改變「只」測試目錄的內容,這不是一個好主意,因爲你可能會產生在測試階段的副作用,如果你的測試不循規蹈矩,他們應該(假設他們留下一個測試資源文件未處於預期狀態和原始狀態)。

當我的代碼在使用maven的CI中運行時,這會產生影響嗎?

我不明白爲什麼它會在這種環境中或多或少地成爲一個問題。最糟糕的是我認爲在開發環境中,因爲如果測試執行產生了副作用,您可能會犯下不希望有的事情。

如果答案是1,那麼有沒有可取的替代方案 方法。

實際上,您將數據複製到src/test/resources內的新文件夾中。 我建議你只是簡單地將數據複製到不存在風險的文件夾中,以便在代碼中創建任何副作用:target/test-classes

該目錄不用於工件的包裝。

相關問題