我有一種方法將FileInfo
對象作爲參數,並檢查相應的文件是否以UTF-8編碼。將FileInfo作爲參數的單元測試方法
我用MSTest寫了一些單元測試,使用添加到UnitTest項目中的實際文本文件,這些文件與DeploymentItem
屬性一起部署。然後我創建指向已部署文件的對象,並用它們測試方法。就像這樣:
[TestMethod]
[DeploymentItem(@"..\..\Import\UTF8.txt")]
public void TestUTF8Detection()
{
FileInfo fileInfo = new FileInfo("UTF8.txt");
bool isUTF8= FormatVerification.IsUTF8(fileInfo);
Assert.IsTrue(isUTF8);
}
不過,我讀過,使用真實文件可能會比較慢和不值得信任(如here和here),所以我想我會怎麼做這個嘲諷的文件。我想我會:
- 創建一個子方法,將實際上測試,而不是原來 其中一個只是調用它,這需要作爲參數
FileStream
,而不是一個FileInfo
。 - 創建一個
FileStream
UTF-8編碼(或不),並將其傳遞給子方法。
所以,我有一些問題,從更具體到更一般:
- 我怎樣才能創建一個沒有真正從文件讀取UTF-8編碼的
FileStream
對象? - 創建此子方法是允許嘲笑文件的唯一替代方法嗎?
- 原始方法怎麼樣?我可以用某種方式測試它嗎?
- 創建這種子方法(只允許單元測試)被認爲是一種好的做法嗎?
- 我是否真的應該儘量避免在單元測試中使用真實文件,或者有沒有像這樣的例子證明它是正確的?
[單元測試文件I/O]的可能重複(http://stackoverflow.com/questions/1528134/unit-testing-file-io) –
請添加'IsUTF8'方法的實現,所以我會能夠回答你的問題.... –