首先,这个测试方法要测试的是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] FakeFile.SetupGet(x=> x.ContentLength).Returns(6 * 1024 * 1024); this._request = FakeRequest.Object; try |
本文出处:http://www.cnblogs.com/luminji/archive/2012/11/30/2796032.html