我想在我正在開發的一個小項目上實現JUnit,因爲我想了解一點。如何比較JUnit測試用例中的文件?
我閱讀的教程都引用了具有特定輸出的方法。
在我的情況下,我的輸出是文件,我該怎麼做?任何簡單的例子? 任何可以幫助我的方法?
這些文件是通過void私有方法構建的原始文本文件。
我想在我正在開發的一個小項目上實現JUnit,因爲我想了解一點。如何比較JUnit測試用例中的文件?
我閱讀的教程都引用了具有特定輸出的方法。
在我的情況下,我的輸出是文件,我該怎麼做?任何簡單的例子? 任何可以幫助我的方法?
這些文件是通過void私有方法構建的原始文本文件。
你想獲得一個給定的輸入,並設置一個測試打電話給你空白法這些輸入正確的輸出文件,然後比較反對什麼你的方法產生已驗證的輸出文件。你需要確保你有一些方法來指定你的方法輸出到哪裏,否則你的測試會非常脆弱。
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void testXYZ() {
final File expected = new File("xyz.txt");
final File output = folder.newFile("xyz.txt");
TestClass.xyz(output);
Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output));
}
使用Commons-io的FileUtils的舒適文本文件比較& JUnit的TemporaryFolder,以確保輸出文件從未存在試運行之前。
在您的方法寫入文件後,在單元測試中,您可以讀取該文件並驗證它是否正確寫入。
另一件有意義的事情是將您的方法拆分成一個檢索該數據並將其返回給僅將其寫入文件的方法的方法。然後你可以驗證第一個方法返回的數據是否正確。
而另一種合理的方法是將OutputStream
傳遞給寫入數據的方法。在「實際代碼」中,您可以通過FileOutputStream
/FileWriter
,而在測試代碼中,您可以編寫OutputStream
的模擬實現並檢查正在寫入的內容。
如果您無法控制將輸出放入流中的方法,那麼我會說您需要重構代碼,以便該方法在參數(或其類的構造函數)中接收流, 。
之後,測試很容易 - 您可以檢查流。易於測試的代碼通常等同於優秀的代碼。
問題是,實際上它不會生成一個單獨的文件,它會根據不同的事情製作3到5個文件。但是因爲我真的很喜歡junit,所以我想先用一個單獨的文件嘗試一下,以便完全理解它。謝謝= D。 – Saikios 2010-09-15 08:20:55
@Saikios這是任何數量的文件:) – 2010-09-15 08:55:52
使用junitx.framework.FileAssert
類別從junit-addons project。其他鏈接:
方法之一:
assertEquals(java.lang.String message,
java.io.Reader expected,
java.io.Reader actual)
** protected ** static void assertEquals(java.lang.String message,java.io.Reader expected,java.io.Reader actual) – user482745 2015-10-23 07:55:53
怎樣的方法寫入文件?如果他們得到一個流,你可以給他們自己的,而不是一個指向一個文件,然後比較它。 – 2010-09-15 08:08:49
whith基本寫入緩衝區字符串在一個網絡爬蟲(我按回車但它寫了消息)代碼是這樣的:txtUrlSpecial.write(bigText.charAt(j)); – Saikios 2010-09-15 08:12:45