2009-03-12 6 views

Antwort

3
MethodInfo mi = typeof(MyType).GetMethod("methodname");  

Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass))); 
1

Ich bin mir nicht sicher, ob die Assertion-Methode, die nunit verwendet, aber Sie können einfach diesen Booleschen Ausdruck für den Parameter verwenden, die an sie übergeben wird (vorausgesetzt, Sie sind in der Lage LINQ zu verwenden.

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

Wenn das Attribut angewendet wird, dann wird es true zurück

Wenn Sie eine generische Version machen wollen (und nicht verwenden typeof) Sie können eine generische Methode verwenden, dies für Sie tun:

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

Und es dann wie so in der Assertion-Methode aufrufen:

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

dies mit einem Ausdruck zu tun, können Sie die folgende Erweiterung definieren erste Methode:

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))); 
} 

Und es dann so in Code aufrufen:

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

Beachten Sie, dass es egal ist, welche Parameter an die Methode übergeben werden, da die Methode nie aufgerufen wird. Sie benötigt lediglich den Ausdruck.

+0

der Anruf Assert.IsTrue - btw, er vielleicht nicht wissen, wie man einen Halt der METHOD – eglasius

+0

I mit Streichern Methode info np bekommen zu bekommen. Hoffte auf einen Ausdruck Ansatz. Dachte, jemand könnte für diese Art von Test bereits Code haben. –

+0

scratchen diese Anfrage. Strings sind für diese Frage in Ordnung. –

0

Eine Alternative für nunit 2,5:

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

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