2009-03-12 9 views

Répondre

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

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

Je ne suis pas sûr de la méthode assert que nunit utilise, mais vous pouvez simplement utiliser cette expression booléenne pour le paramètre qui lui est passé (en supposant que vous êtes en mesure d'utiliser LINQ.

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

Si l'attribut est appliqué, il retourne vrai

Si vous voulez faire une version générique (et ne pas utiliser typeof) vous pouvez utiliser une méthode générique pour le faire pour vous:

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

Et puis appelez dans votre méthode assert comme ceci:

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

Pour ce faire, avec une expression, vous pouvez définir l'extension suivante première méthode:

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

Et puis appelez dans le code comme ceci:

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

Notez que les paramètres transmis à la méthode n'ont pas d'importance car, comme la méthode n'est jamais appelée, elle a simplement besoin de l'expression.

+0

l'appel est Assert.IsTrue - BTW, il pourrait ne pas savoir comment obtenir une prise de METHODINFO – eglasius

+0

je peux obtenir la méthode d'information np avec des chaînes. Espérait une approche d'expression. Je pensais que quelqu'un pourrait avoir déjà du code pour ce type de test. –

+0

grattez cette requête. Les chaînes sont bien pour cette question. –

0

Une alternative pour nunit 2.5:

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

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