单元测试文件上传时无法保存文件

Cannot save file when unit testing a file upload

我尝试对一个 mvc 控制器进行单元测试,该控制器接收一个以 HttpPostedFile 作为参数的模型

    var constructorInfo = typeof(HttpPostedFile).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)[0];
    var obj = (HttpPostedFile)constructorInfo
        .Invoke(new object[] { @"D:\test.xlsx", "application/vnd.ms-excel", null });

    model.MembershipRegisterFile = new HttpPostedFileWrapper(obj);

当我 运行 测试和控制器尝试将文件保存到磁盘时,我在这一行遇到异常..

file.SaveAs(完整路径);

有错误...

System.NullReferenceException: 'Object reference not set to an instance of an object.'

我认为这是因为文件没有真正上传并且文件的内容长度为空。那么我应该如何处理这个问题。我是否应该在我的控制器中包含 contentlength 等于 null 的可能性的逻辑,或者 HttpPostedFile 是否可以设置内容长度?

更新:我像这样模拟了文件并且这有效....

var postedfile = new Mock<HttpPostedFileBase>();
postedfile.Setup(f => f.ContentLength).Returns(8192);
postedfile.Setup(f => f.FileName).Returns("myfile.txt");
postedfile.Setup(f => f.InputStream).Returns(new MemoryStream(8192));
myObject.HttpPostedFile = postedfile.Object;

Unit Testing File I/O 你可以分析link。我认为你不应该在你的项目中放置一个文件。您应该创建一个模拟文件。创建模拟文件使用 System.IO.Abstractions