Aquí podría ser tu PUBLICIDAD


¿Cuál es la forma más corta de afirmar que un atributo se aplica al método en c #?

votos
0

¿Cuál es la forma más corta de afirmar que un atributo se aplica al método en c #?

Estoy usando nunit-2.5

:)

Publicado el 12/03/2009 a las 19:33
fuente por usuario Dane O'Connor
En otros idiomas...        العربية       

3 respuestas

votos
3

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

Assert.IsFalse (Attribute.IsDefined (mi, typeof(MyAttributeClass)));
Respondida el 12/03/2009 a las 07:44
fuente por usuario Frederik Gheysels


Aquí podría ser tu PUBLICIDAD


votos
1

No estoy seguro del método assert que utiliza nunit, pero puede simplemente usar esta expresión booleana para el parámetro que se le pasa (suponiendo que pueda usar LINQ:

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

Si el atributo se aplica, entonces volverá verdadero.

Si desea crear una versión genérica (y no usar typeof) puede usar un método genérico para hacer esto por usted:

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

Y luego llámalo en tu método afirmar así:

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

Para hacer esto con una expresión, primero puede definir el siguiente método de extensión:

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

Y luego llámalo en código así:

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

Tenga en cuenta que no importa cuáles sean los parámetros que se pasan al método, ya que nunca se llama al método, simplemente necesita la expresión.

Respondida el 12/03/2009 a las 07:38
fuente por usuario casperOne

votos
0

Una alternativa para nunit 2.5:

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

Assert.That(methodInfo, Has.Attribute(typeof(MyAttribute)));
Respondida el 12/03/2009 a las 07:56
fuente por usuario Dane O'Connor