Quel est le moyen le plus court d'affirmer qu'un attribut est appliqué à la méthode dans C#?Quel est le moyen le plus court d'affirmer qu'un attribut est appliqué à la méthode dans C#?
J'utilise nunit-2,5
:)
Quel est le moyen le plus court d'affirmer qu'un attribut est appliqué à la méthode dans C#?Quel est le moyen le plus court d'affirmer qu'un attribut est appliqué à la méthode dans C#?
J'utilise nunit-2,5
:)
MethodInfo mi = typeof(MyType).GetMethod("methodname");
Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass)));
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.
Une alternative pour nunit 2.5:
var methodInfo = typeof(MyType).GetMethod("myMethod");
Assert.That(methodInfo, Has.Attribute(typeof(MyAttribute)));
l'appel est Assert.IsTrue - BTW, il pourrait ne pas savoir comment obtenir une prise de METHODINFO – eglasius
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. –
grattez cette requête. Les chaînes sont bien pour cette question. –