我想测试以下代码行:
... Bitmap uploadedPicture = Bitmap.FromStream(model.Picture.InputStream) as Bitmap; ...
图片是我的模型类型HttpPostedFileBase中的一个属性.
所以我想模拟一个HttpPostedFileBase属性进行单元测试:
model.Picture = new Mock<HttpPostedFileBase>().Object;
完全没问题.
现在我必须模拟InputStream,否则为null:
model.Picture.InputStream = new Mock<Stream>().Object;
这不工作,因为InputStream是只读(没有setter方法):
public virtual Stream InputStream { get; }
有没有一个好的和干净的方式来处理这个问题?
一个解决方案是在我的单元测试的派生类中覆盖HttpPostedFileBase.
任何其他想法?
解决方法
你好:)我做了类似的事情,
[Testinitialize] public void SetUp() { _stream = new FileStream(string.Format( ConfigurationManager.AppSettings["File"],AppDomain.CurrentDomain.BaseDirectory),FileMode.Open); // Other stuff }
而在测试本身,
[TestMethod] public void FileUploadtest() { // Other stuff #region Mock HttpPostedFileBase var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var files = new Mock<HttpFileCollectionBase>(); var file = new Mock<HttpPostedFileBase>(); context.Setup(x => x.Request).Returns(request.Object); files.Setup(x => x.Count).Returns(1); // The required properties from my Controller side file.Setup(x => x.InputStream).Returns(_stream); file.Setup(x => x.ContentLength).Returns((int)_stream.Length); file.Setup(x => x.FileName).Returns(_stream.Name); files.Setup(x => x.Get(0).InputStream).Returns(file.Object.InputStream); request.Setup(x => x.Files).Returns(files.Object); request.Setup(x => x.Files[0]).Returns(file.Object); _controller.ControllerContext = new ControllerContext( context.Object,new RouteData(),_controller); // The rest... }
原文地址:https://www.jb51.cc/aspnet/250612.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。