这可能是重复的,但我无法找到我要找的问题,所以我要求它。
你怎么测试方法的参数装饰着attribte? 例如,下面的MVC操作方法,使用FluentValidation的CustomizeValidatorAttribute
:
[HttpPost]
[OutputCache(VaryByParam = "*", Duration = 1800)]
public virtual ActionResult ValidateSomeField(
[CustomizeValidator(Properties = "SomeField")] MyViewModel model)
{
// code
}
我敢肯定,我不得不强类型的lambda表达式使用反射,希望。 但不知道从哪里开始。
一旦你了解了该方法的手柄, GetMethodInfo
通过反射调用,您可以简单地调用GetParameters()
对方法,然后对每个参数,您可以检查GetCustomAttributes()
调用类型X.例如实例:
Expression<Func<MyController, ActionResult>> methodExpression =
m => m.ValidateSomeField(null);
MethodCallExpression methodCall = (MethodCallExpression)methodExpression.Body;
MethodInfo methodInfo = methodCall.Method;
var doesTheMethodContainAttribute = methodInfo.GetParameters()
.Any(p => p.GetCustomAttributes(false)
.Any(a => a is CustomizeValidatorAttribute)));
Assert.IsTrue(doesTheMethodContainAttribute);
这个测试,例如,如果将任何参数包含的属性告诉你。 如果你想要一个特定的参数,你就需要改变GetParameters
调用到更具体的东西。