C#单元测试无法将图像保存到服务器,但应用程序运行正常

时间:2018-09-19 15:21:06

标签: c# asp.net unit-testing

我正在尝试将图像从Web URL保存到本地ASP.Net项目文件夹“〜Content / Images”

最初我是这样保存图像的:

imgUrl = "http://example.com/myimage.jpg";
imgName = Path.GetFileName(imgUrl);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.Drawing.Image img = System.Drawing.Image.FromStream(response.GetResponseStream());
img.Save(Server.MapPath("~/Content/Images/" + imgName));

但是我的单元测试以NullReferenceException方法在Server object上的Server.MapPath()失败了。

然后我尝试了另一种保存图像的方法。

imgUrl = "http://example.com/myimage.jpg";
imgName = Path.GetFileName(imgUrl);

byte[] data;

using (WebClient client = new WebClient())
   data = client.DownloadData(imgUrl);

  if (data != null)
  {
   MemoryStream ioStream = new MemoryStream();
   ioStream = new MemoryStream(data);

    using (Stream originalBinaryDataStream = ioStream)
    {
     var path = System.IO.Path.Combine("~/Content/Images/" + imgName);
     Image image = Image.FromStream(originalBinaryDataStream);                                    
     image.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);                                    
    }
  }

但是单元测试再次失败。这次出现System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.错误。

顺便说一句,该应用程序运行良好。仅当我正在运行单元测试时,才会出现此问题。

有人有解决此问题的想法吗?

2 个答案:

答案 0 :(得分:0)

在单元测试中,您将必须伪造或模拟HttpContext。

答案 1 :(得分:0)

  

从文件构造位图对象或图像对象时,文件在对象的生存期内保持锁定状态。因此,您无法更改图像并将其保存回其原始位置。 http://support.microsoft.com/?id=814675

您可以尝试以下操作:

obj.quantity