コントローラーの単体テストを作成中です。次の単純なコントローラーがあります。
public class ClientController : Controller
{
[HttpPost]
public ActionResult Create(Client client, [DataSourceRequest] DataSourceRequest request)
{
if (ModelState.IsValid)
{
clientRepo.InsertClient(client);
}
return Json(new[] {client}.ToDataSourceResult(request, ModelState));
}
}
この単体テストは次のとおりです。
[Test]
public void Create()
{
// Arrange
clientController.ModelState.Clear();
// Act
JsonResult json = clientController.Create(this.clientDto, this.dataSourceRequest) as JsonResult;
// Assert
Assert.IsNotNull(json);
}
また、コントローラー コンテキストは次のコードで偽造されます。
public class FakeControllerContext : ControllerContext
{
HttpContextBase context = new FakeHttpContext();
public override HttpContextBase HttpContext
{
get
{
return context;
}
set
{
context = value;
}
}
}
public class FakeHttpContext : HttpContextBase
{
public HttpRequestBase request = new FakeHttpRequest();
public HttpResponseBase response = new FakeHttpResponse();
public override HttpRequestBase Request
{
get { return request; }
}
public override HttpResponseBase Response
{
get { return response; }
}
}
public class FakeHttpRequest : HttpRequestBase
{
}
public class FakeHttpResponse : HttpResponseBase
{
}
}
コントローラー アクションがメソッドCreate
を呼び出そうとすると、例外が発生します。ToDataSourceResult
System.EntryPointNotFoundException : Entry point was not found.
デバッグは、単体テストで ModelState 内部ディクショナリが空であることを示しています (標準コンテキストで実行した場合ではありません)。ModelState
がメソッドから削除された場合ToDataSourceResult
、テストは成功します。どんな助けでも大歓迎です。