我有类 ImportProvider
,我想为 Import 方法编写单元测试。
但这应该是单元测试,所以我不想从文件读取到流。 有什么想法吗?
public class ImportProvider : IImportProvider
{
public bool Import(Stream stream)
{
//Do import
return isImported;
}
}
public interface IImportProvider
{
bool Import(Stream input);
}
这是单元测试:
[TestMethod]
public void ImportProvider_Test()
{
// Arrange
var importRepository = new Mock<IImportRepository>();
var imp = new ImportProvider(importRepository.Object);
//Do setup...
// Act
var test_Stream = ?????????????
// This working but not option:
//test_Stream = File.Open("C:/ExcelFile.xls", FileMode.Open, FileAccess.Read);
var result = imp.Import(test_Stream);
// Assert
Assert.IsTrue(result);
}
最佳答案
使用内存流。不确定您的函数期望什么,但是例如将 UTF-8 字符串填充到其中:
//Act
using (var test_Stream = new MemoryStream(Encoding.UTF8.GetBytes("whatever")))
{
var result = imp.Import(test_Stream);
// Assert
Assert.IsTrue(result);
}
编辑:如果您需要一个 Excel 文件,并且您无法从磁盘读取文件,您可以将 Excel 文件作为嵌入式资源添加到您的测试项目中吗?参见 How to embed and access resources by using Visual C#
然后您可以像这样读取流:
//Act
using (var test_Stream = this.GetType().Assembly.GetManifestResourceStream("excelFileResource"))
{
var result = imp.Import(test_Stream);
// Assert
Assert.IsTrue(result);
}
关于c# - 如何为使用流作为参数的方法编写 unitTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212279/