統合テストを作成した 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 を使用するため (セキュリティ上の理由から証明書が検証されます)、プロキシの使用には問題があります。また、制限付きの権限で実行されます。
ときどきテストが失敗します。要求と応答のコピーを保存し ( fiddlerと同様)、各テストに関連付けて、問題が存在する場合にそれを遡及的に使用して診断できるようにしたいと考えています。
テストの結果を変更する副作用なしに、要求と応答 (ヘッダーを含む) をディスクに保存できますか? たとえば、大きなストリームの場合、応答ストリームはシークできないため、応答のテストを続行する前にストリームをディスクに保存しようとしてもうまくいかないようです。