2013-10-01 52 views
0

出於某種原因,我有一個路徑(/ /什麼/永遠)存儲在一個私人變量中的文件被修改的類。所以,當我測試它時,它會嘗試修改文件,但由於該文件不在那裏,所以會引發異常。如何模擬根文件夾中的文件被修改

當然,對於單元測試,我不想在文件系統中創建該文件。

有沒有辦法嘲笑這個文件,並強制機器寫入// my /文件夾而不是//什麼/永遠?

+0

爲什麼不只是改變用於測試的私有變量的值? –

+0

因爲,那麼當我提交更改時,Jenkins運行的測試將失敗。 – luanjot

+0

看看這裏http://stackoverflow.com/questions/5081738/how-to-unit-test-file-access-java。這幾乎是同一個問題。 – Bart

回答

0

嘲諷文件本身可能很困難。除非你將文件處理抽象成你管理的某個接口,並且可以在測試運行期間注入一個模擬實現。另一種方法是公開文件路徑,以便可以將其更改爲測試設置代碼的一部分。

另一種方法涉及JUnit 4.在JUnit 4中,您可以在測試運行中管理臨時文件和文件夾。它將清除您創建的任何新文件或文件夾。

這是可以做到像這樣:

public class MyFileTest { 
    @Rule 
    public TemporaryFolder testFolder = new TemporaryFolder(); 

    @Test 
    public void testSomething() throws IOException { 
     File tempFile = testFolder.newFile("myfile"); 

我認爲像這樣將允許您創建實際的文件,以便您的代碼可以修改它,因此沒有吹起來。您可能需要考慮以下方面的測試範圍:

  • 您要測試什麼?
  • 是否將正確的內容寫入文件?
  • 是否修改了文件本身?

回答其中的一些問題可能會打動你在你可能需要做的,方便的測試需求究竟是什麼樣的測試,你應該寫什麼重構正確的方向。

+0

我討厭這個規則,但我不明白我怎麼能告訴它去「//什麼/永遠」。我可以做的是創建一個臨時目錄,我確信它會被刪除,但那不是我想要的。我有一個文件總是在同一個目錄下,我想要打開和分析這個文件。所以,我需要用測試「改變」文件的路徑。 – luanjot

+1

當你說在測試環境中進行分析時,你的意思是斷言寫入文件的內容是什麼?如果是這種情況,您是否可以重構代碼以使內容本身易於測試並與文件創建/修改部分分離?如果你想測試一下這個文件是否已經創建好了,你可以用你提供的父文件夾來重構它。這樣當你編寫測試時,部分設置可以使用TemporaryFolder規則,傳遞給你的燈具。 –

+0

是的,這就是我最終所做的......我試圖避免它,但我想這是不可避免的。不管怎樣,謝謝。 – luanjot

相關問題