Какой самый короткий способ утверждать, что атрибут применяется к методу в c #? - PullRequest
0 голосов
/ 12 марта 2009

Какой самый короткий способ утверждать, что атрибут применяется к методу в c #?

Я использую nunit-2.5

:)

Ответы [ 3 ]

3 голосов
/ 12 марта 2009
MethodInfo mi = typeof(MyType).GetMethod("methodname");    

Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass)));
1 голос
/ 12 марта 2009

Я не уверен в методе assert, который использует nunit, но вы можете просто использовать это логическое выражение для передаваемого ему параметра (при условии, что вы можете использовать LINQ:

methodInfo.GetCustomAttributes(attributeType, true).Any()

Если атрибут применяется, он вернет true.

Если вы хотите сделать универсальную версию (а не использовать typeof), вы можете использовать универсальный метод, чтобы сделать это для вас:

static bool IsAttributeAppliedToMethodInfo<T>(this MethodInfo methodInfo) 
    where T : Attribute
{
    // If the attribute exists, then return true.
   return methodInfo.GetCustomAttributes(typeof(T), true).Any();
}

А затем вызовите его в вашем методе assert следующим образом:

<assert method>(methodInfo.IsAttributeAppliedToMethodInfo<MyAttribute>());

Чтобы сделать это с помощью выражения, вы можете сначала определить следующий метод расширения:

public static MethodInfo 
    AssertAttributeAppliedToMethod<TExpression, TAttribute>
    (this Expression<T> expression) where TAttribute : Attribute
{
    // Get the method info in the expression of T.
    MethodInfo mi = (expression.Body as MethodCallExpression).Method;

    Assert.That(mi, Has.Attribute(typeof(TAttribute)));
}

А затем назовите его в коде, подобном этому:

(() => Console.WriteLine("Hello nurse")).
    AssertAttributeAppliedToMethod<MyAttribute>();

Обратите внимание, что не имеет значения, какие параметры передаются в метод, поскольку метод никогда не вызывается, ему просто нужно выражение.

0 голосов
/ 12 марта 2009

Альтернатива для nunit 2.5:

var methodInfo = typeof(MyType).GetMethod("myMethod");

Assert.That(methodInfo, Has.Attribute(typeof(MyAttribute)));
...