假设我有一个 ASP.NET MVC 3 控制器和我为其编写集成测试的操作。
namespace Sample.Controllers {
public class MyController : Controller {
[HttpPost]
public ActionResult Edit(MyModel model)
{
// process requests
}
}
}
测试具有以下“模式”。
namespace Sample.Controllers.IntegrationTests {
[TestClass]
public class MyControllerTests
{
[TestMethod]
public void Edit()
{
var request = (HttpWebRequest) WebRequest.Create(new Uri(uri));
request.Method = "POST";
request.Accept = "application/json";
request.AllowAutoRedirect = false;
request.AutomaticDecompression = DecompressionMethods.GZip;
request.UserAgent = "IntegrationTests/1.0";
request.ContentType = "application/json";
var resource = CreateResource();
using (Stream stream = request.GetRequestStream())
{
// serialize resource to stream
}
using (var response = (HttpWebResponse) request.GetResponse())
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
/* perform more tests */
}
}
public MyModel CreateResource() {
/* create an instance of mymodel */
}
}
}
这些测试旨在验证功能、安全性等;所以模拟和单元测试是不够的。测试以无人值守的方式执行,并且始终使用 https(出于安全原因,对证书进行了验证),因此使用代理是有问题的。它们也以有限的特权执行。
时不时地测试失败。我想保存请求和响应的副本(类似于提琴手所做的)并将其与每个测试相关联,以便可以追溯使用它来诊断问题(如果存在)。
可以将请求和响应(包括它们的标头)保存到磁盘而不会产生改变测试结果的副作用吗?例如,对于大型流,响应流不可查找,因此在继续测试响应之前尝试将流保存到磁盘似乎不起作用。