单元测试WebForm的UI逻辑及文件上传

发表于:2013-1-28 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陆敏技    来源:51Testing软件测试网采编

  首先,这个测试方法要测试的是Page_Load方法的逻辑正确性,即:执行完毕,客户端输出“test u”,它所依赖的是Response.Write这个方法,这个方法是向客户端浏览器输出文本,显然我们的单元测试中是不允许网络传输的,所以我们只能将Response.Write这个行为模拟到内存中去,测试代码中很大一部分就是模拟这个行为。要深刻理会的是:

  1:我们要验证的是Page_Load行为的准确性,而不是验证Response.Write的准确性;

  2:Response.Write是Page_Load行为中的一种依赖,测试方法要对这种依赖进行模拟;

  备注:Response.Write内部使用TextWriter,模拟的时候,我们使用了TextWriter的一个子类,StringWriter。

  上面的例子很简单,进一步看,我们如何来写针对文件上传的单元测试。假设上传的逻辑是这样的:

Public void UploadFile()
{
  Var file = _request.Files[0];
  If(file.contentLength==0 || file.ContentLength > 5 * 1024 * 1024)
  {
throw new ArgumentException();
  }
  File.SaveAs(file.FileName);
}

  则,其中一个测试用例的代码应该象如下这样:

[TestMethod]
public void ThrowExceptionIfFilelengthInvalid()
{
  FakeRequest = new Mock<HttpRequestBase>();
  FakeFiles = new Mock<HttpFileCollectionBase>();
  FakeFile = new Mock<HttpPostedFileBase>();

  FakeFile.SetupGet(x=> x.ContentLength).Returns(6 * 1024 * 1024);
  FakeFiles.SetupGet( x=> x[0]).Returns(FakeFile.Object);
  FakeRequest.SetupGet( x=>x.Files).Returns(FakeFiles.Object);

  this._request = FakeRequest.Object;

  try
  {
this.UploadFile();
Assert.Fail();
  }
  catch(ArugmentOutOfRangeException)
  {
  }
}

  本文出处:http://www.cnblogs.com/luminji/archive/2012/11/30/2796032.html

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号