Cómo probar la presencia de Atributos de Clase y Atributos de Método con MsTest usando C#?Cómo probar atributos de la unidad con MsTest usando C#?
Respuesta
C# Extension method for checking attributes
public static bool HasAttribute<TAttribute>(this MemberInfo member)
where TAttribute : Attribute
{
var attributes =
member.GetCustomAttributes(typeof(TAttribute), true);
return attributes.Length > 0;
}
Utilice la reflexión, por ejemplo aquí hay una en nunit + C#, que se puede adaptar fácilmente a MsTest.
[Test]
public void AllOurPocosNeedToBeSerializable()
{
Assembly assembly = Assembly.GetAssembly(typeof (PutInPocoElementHere));
int failingTypes = 0;
foreach (var type in assembly.GetTypes())
{
if(type.IsSubclassOf(typeof(Entity)))
{
if (!(type.HasAttribute<SerializableAttribute>())) failingTypes++;
Console.WriteLine(type.Name);
//whole test would be more concise with an assert within loop but my way
//you get all failing types printed with one run of the test.
}
}
Assert.That(failingTypes, Is.EqualTo(0), string.Format("Look at console output
for other types that need to be serializable. {0} in total ", failingTypes));
}
//refer to Robert's answer below for improved attribute check, HasAttribute
Con un poco de trabajo, apuesto a que podría hacer que 'IsTypeSerializable' sea un método genérico que pueda manejar cualquier atributo. –
@Robert, definitivamente, también podría mejorar la lectura como una extensión en System.Type, que puedo incluir por el simple hecho de hacerlo – dove
@Robert, tenía un pequeño juguete con eso y es bastante factible, pero creo que solo sería una respuesta desordenada encima. Mi respuesta está muy determinada con las pruebas en mente, escribiendo los tipos que fallan en la consola. El método de extensión podría tener una firma como: public static bool IsTypeSerializeable (este System.Type tipo, System.Type checkType) // aunque es posible que desee tener un atributo como segundo parámetro, necesita un poco más de trabajo que yo solo hazlo si fue necesario. está bien, lo pondré;) – dove
escribe usted mismo dos funciones de ayuda (mediante reflexión) a lo largo de estas líneas:
public static bool HasAttribute(TypeInfo info, Type attributeType)
public static bool HasAttribute(TypeInfo info, string methodName, Type attributeType)
entonces usted puede escribir pruebas de la siguiente manera:
Assert.IsTrue(HasAttribute(myType, expectedAttribute));
De esta manera no es necesario use if/else/foreach u otra lógica en sus métodos de prueba. Por lo tanto, se vuelven mucho más claros y legibles.
HTH
Thomas
tiene un punto, pero mi prueba (y otras que no he puesto aquí) es que con una ejecución de prueba obtiene todas las entidades defectuosas entregadas a la consola , guardando múltiples repeticiones de prueba para cada entidad que falla, como Robert ha dado, todavía hay formas más elegantes. – dove
- 1. ¿Cómo probar la unidad Singleton class - C++?
- 2. Usando MSTest con F #
- 3. ¿Cómo probar la unidad?
- 4. MSTest - prueba de unidad con StackOverflowException
- 5. Probar un campo privado usando MSTest
- 6. Cómo probar la unidad HtmlHelper con Moq?
- 7. ¿Cómo probar la unidad NSCoding?
- 8. Usando MSTest con CruiseControl.NET
- 9. ¿Cómo probar la unidad de su API?
- 10. comprobar la salida en la prueba de la unidad MSTest
- 11. Cómo probar la unidad de análisis JSON
- 12. cómo probar atributos html con rspec?
- 13. Cómo probar las subclases de la unidad
- 14. ¿Cómo puedo probar la unidad GC?
- 15. ¿Cómo puedo probar la unidad First Framework Code First Mappings?
- 16. Cómo probar el código de unidad que usa HostingEnvironment.MapPath
- 17. ¿Cómo puedo probar la unidad? ¿Es descartable?
- 18. ¿Cómo puedo probar la unidad con jazmín y navegar?
- 19. Cómo probar la unidad con diferentes configuraciones en Django?
- 20. Cómo simular objetos usando MSTest?
- 21. ¿Cómo debo probar la unidad de un generador de código?
- 22. ¿Cómo puedo probar la unidad de un servicio de Windows?
- 23. ¿Cómo se prueba un código asíncrono usando MSTest?
- 24. Cómo probar el código de unidad con muy pocas unidades
- 25. Cómo probar las clases abstractas de unidad
- 26. Cómo probar la lógica de la unidad en jsp?
- 27. Setter en la Unidad sin atributos
- 28. Cómo probar la unidad de lógica de devolución de llamada?
- 29. Cómo probar la unidad Código de Excel VBA
- 30. Cómo mapear una unidad usando C#?
Esto parece un exceso. Puedes simplemente inspeccionar el código fuente. – jason
En realidad este tipo de cosas es bastante bueno para atrapar errores de refactorización. Asegurarse de que el código que se basa en los atributos está bien probado (y da mensajes de error decentes) también es importante. –
y es requerido por TDD –