Я нахожусь в процессе написания некоторых модульных тестов для наших контроллеров. У нас есть следующий простой контроллер.
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
, то тест проходит успешно. Буду признателен за любую оказанную помощь.