Was ist der kürzeste Weg zu behaupten, dass ein Attribut auf die Methode in C# angewendet wird?Was ist der kürzeste Weg zu behaupten, dass ein Attribut auf die Methode in C# angewendet wird?
Ich verwende nunit-2.5
:)
Was ist der kürzeste Weg zu behaupten, dass ein Attribut auf die Methode in C# angewendet wird?Was ist der kürzeste Weg zu behaupten, dass ein Attribut auf die Methode in C# angewendet wird?
Ich verwende nunit-2.5
:)
MethodInfo mi = typeof(MyType).GetMethod("methodname");
Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass)));
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.
Eine Alternative für nunit 2,5:
var methodInfo = typeof(MyType).GetMethod("myMethod");
Assert.That(methodInfo, Has.Attribute(typeof(MyAttribute)));
der Anruf Assert.IsTrue - btw, er vielleicht nicht wissen, wie man einen Halt der METHOD – eglasius
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. –
scratchen diese Anfrage. Strings sind für diese Frage in Ordnung. –