我用UnitTesting的某些數據轉儲了一個文件。 當代碼嘗試加載文件時,它會得到FileNotFoundException。File.Exists在UnitTest上下文中返回false
數據和代碼文件在同一文件夾中彼此相鄰。
- Project.Test
- data.xml中
- data.cs
我用UnitTesting的某些數據轉儲了一個文件。 當代碼嘗試加載文件時,它會得到FileNotFoundException。File.Exists在UnitTest上下文中返回false
數據和代碼文件在同一文件夾中彼此相鄰。
看來,測試項目需要在bin /調試編譯後的文件複製夾。只有當您將「複製到輸出目錄」屬性設置爲「複製始終」。
我不知道這是否適合您的目的,但我經常會將樣本/數據/其他文件包含爲嵌入式資源。如果您選擇這樣做,您仍然需要在解決方案資源管理器中的文件上設置Build Action
屬性,但您不必擔心文件位於何處或存在。
下面是一個讀取文件的示例方法。我建議將方法更改爲字符串,XDocument或其他更合適的格式(如果它適合您的數據類型)。 resource
將成爲文件的項目路徑(即上例中的Project.Test.data.xml
)。
private byte[] GetEmbeddedResourceBytes(string resource)
{
var asm = Assembly.GetExecutingAssembly();
using (var stream = asm.GetManifestResourceStream(resource)) {
if (stream != null) {
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream()) {
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
}
return new byte[0];
}
我只想指出,如果你正在從磁盤讀取,你不寫一個單元測試。單元測試在內存中運行,所有外部資源應該使用測試雙抽象(自制或通過框架) – kai