c# - unit - setup mock
Atributos de burla-C# (3)
Aquí hay un ejemplo de cómo he probado atributos personalizados. En este caso, tengo un atributo personalizado que se usa en un método. En mi clase de prueba, he creado un método de marcador de posición al cual se aplica el atributo personalizado. Luego utilicé la reflexión para obtener la instancia del atributo personalizado.
[TestFixture] public class SomeRandomAttributeTest
{
[SomeRandom(RestrictionType.Local)]
public void PlaceholderMethodForAttribute() {throw new ApplicationException(this.ToString());}
[Test]public void BlahBlahIsBlahTheBlah()
{
object[] attributes = this.GetType().GetMethod("PlaceholderMethodForAttribute").GetCustomAttributes(false);
Assert.AreEqual(1, attributes.Length);
Assert.IsInstanceOfType(typeof(SomeRandomAttribute), attributes[0]);
Assert.AreEqual("Yada yada yada", ((SomeRandomAttribute) attributes[0]).Yada);
}
}
Utilizo Atributos personalizados en un proyecto y me gustaría integrarlos en mis pruebas unitarias.
Ahora uso Rhino Mocks para crear mis simulaciones, pero no veo la manera de agregar mis atributos (y sus parámetros).
¿Me perdí algo, o no es posible? Otro marco de burla? ¿O tengo que crear implementaciones ficticias con mis atributos?
ejemplo: tengo una interfaz en una arquitectura de complemento (IPlugin) y hay un atributo para agregar meta información a una propiedad. Luego busco propiedades con este atributo en la implementación del complemento para un procesamiento adicional (almacenando su valor, marca como GUI de solo lectura ...)
Ahora cuando creo un simulacro, ¿puedo agregar fácilmente un atributo a una propiedad o la instancia del objeto en sí?
EDIT: encontré una publicación con la misma pregunta -> enlace . La respuesta no es 100% y es Java ...
EDIT 2: Se puede hacer ... buscó un poco más (en SO) y encontró 2 preguntas relacionadas (+ respuestas)
Ahora, ¿esto ya está implementado en uno u otro marco burlón?
¿Por qué no puedes hacer algo como esto?
var sut = new SomeRandomAttribute(RestrictionType.Local);
Assert.AreEqual("Yada yada yada", sut.Yada);
Si desea probar el código que visita todos sus tipos y hace algunas cosas para cada uno de los SomeRandomAttribute
de SomeRandomAttribute
que encuentra, le sugiero que lo divida en la recuperación de los objetos MethodInfo que están decorados con su atributo personalizado y las operaciones que necesitan para ser realizado en estos objetos. Lo posterior debería ser fácil de probar dado un objeto y atributo MethodInfo correctamente configurado. Lo primero podría hacerse utilizando marcadores de posición de prueba específicos para su atributo, como lo sugirió Joseph.
Depende de lo que necesite probar:
- Al probar alguna "funcionalidad" del atributo, si el atributo que ha agregado tiene algún efecto sobre la clase / método que decora, puede crear una clase ficticia que herede IPlugin con ese atributo y probar que su comportamiento se vio afectado por la presencia del atributo o valor.
- Si desea probar alguna funcionalidad interna del atributo, simplemente cree ese atributo y use assert para verificar ese resultado final.
No creo que necesites burlarte aquí.