2

假设我有一个 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(出于安全原因,对证书进行了验证),因此使用代理是有问题的。它们也以有限的特权执行。

时不时地测试失败。我想保存请求和响应的副本(类似于提琴手所做的)并将其与每个测试相关联,以便可以追溯使用它来诊断问题(如果存在)。

可以将请求和响应(包括它们的标头)保存到磁盘而不会产生改变测试结果的副作用吗?例如,对于大型流,响应流不可查找,因此在继续测试响应之前尝试将流保存到磁盘似乎不起作用。

4

0 回答 0