У меня есть следующий атрибут:Unit Тестирование пользовательского проверки фильтра
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
У меня есть этот общий метод расширения для определения того, применяется ли атрибут к методу или не
public static bool ActionHasFilter(this ApiController controller, string action, Type filter)
{
var controllerType = controller.GetType();
var method = controllerType.GetMethod(action);
object[] filters = method.GetCustomAttributes(filter, true);
return filters.Any(x=>x.GetType() == filter);
}
Моя проблема как я могу проверить, действительно ли атрибут работает или нет, без проверки действия контроллера?
Скажем, у меня есть следующие лица
public class UserViewModel
{
[Required]
public string Name {get; set;}
[Required]
[EmailAddress]
public string Email {get;set;
}
Как бы я идти о насмехаясь контекста и проверки, является ли эта модель действительна?
Я использую Nunit и Moq.
Ваш код будет работать на модульном тесте, но не на реализованном атрибуте, потому что HttpActionContext нельзя передать в TestableHttpActionContext. – Prutswonder
Вам просто нужно использовать HttpActionContext not TestableHttpActionContext. Это просто облегчает проверяемое поведение. Важно: TestableHttpActionContext не имеет никакого поведения и используется только для тестирования. – Spock
Я знаю, но ваш код не работает в производстве. Когда OnActionExecuting запускается с помощью обычного HttpActionContext, он выдает исключение, потому что его нельзя отнести к TestableHttpActionContext. – Prutswonder