У меня есть приложение .NET Framework 4.7.2 MVC, которое я перевожу на приложение .NET Core 2.1. Пока все работает, но я не могу получить один из модульных тестов, который тестировал собственный атрибут, который я написал, работая в .NET Core версии.
Это код для теста атрибутов в версии Framework
private HttpActionContext _successContext;
private HttpActionContext _failContext;
private HttpControllerContext _controllerContext;
[TestInitialize]
public void Initialize()
{
_controllerContext = new HttpControllerContext
{
Request = new HttpRequestMessage(HttpMethod.Post, string.Empty)
{
Content = new ObjectContent(typeof(string), string.Empty, new JsonMediaTypeFormatter())
}
};
_successContext = new HttpActionContext {ControllerContext = _controllerContext};
_successContext.ModelState.Add("TestField", new ModelState());
_failContext = new HttpActionContext { ControllerContext = _controllerContext };
_failContext.ModelState.Add("TestField", new ModelState());
_failContext.ModelState.AddModelError("TestField", "Test error message");
}
Как правильно добавить HttpControllerContext и ActionContext в версию .NET Core?
Или это неправильный подход для проверки атрибута в .NET Core?
Это версия атрибута Frameowrk, которая тестируется
public class JsonValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid) return;
var errorMessages = actionContext.ModelState.Values
.SelectMany(modelState => modelState.Errors.Select(x => x.ErrorMessage));
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, Json.Encode(errorMessages));
}
}
Вот как я разработал этот атрибут в версии .NET Core (он работает, как и ожидалось, но мне просто нужно повторно реализовать Unit Test для него.
public class JsonValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
if (actionContext.ModelState.IsValid) return;
IEnumerable<string> errorMessages = actionContext.ModelState.Values.SelectMany(modelState => modelState.Errors.Select(x => x.ErrorMessage));
actionContext.Result = new BadRequestObjectResult(errorMessages);
}
}