2008-12-19 9 views
12

Me encanta Extender el Assert.AreEqual a muchas clases diferentes, la que se conoce es la CollectionAssert por supuesto, pero puedo pensar en algunas más, como: ImageAssert, etc .. XmlAssert¿Cómo se extienden a su clase Assert

¿Creaste tus propias clases de Assert? y qué tipo de nuevo te gustaría crear?

Respuesta

0

Acabo de añadir una aplicación a ImageAssert como he escrito anteriormente (en mi pregunta) estaría contento de escuchar más de ese tipo de muestras

0

Muchas de mis pruebas giran en torno a la carga de un objeto que (como un CuttingPath) con un buen estado conocido .. Realizando la prueba, luego comparando el resultado con el objeto cargado. Si difieren, algo 'sucedió' causó un cambio en el código.

Este enfoque ahorra muchísimo tiempo y permite comparaciones personalizadas cuando es necesario.

4

Me gusta la sensación de la clase Assert, pero quería algo que sirviera más como un marco de validación general. Comencé con Roger Alsing de article sobre el uso de métodos de extensión, y ahora tienen un sistema que funciona como:

Enforce.That(variable).IsNotNull(); 
Enforce.That(variable).IsInRange(10, 20); 
Enforce.That(variable).IsTypeOf(typeof(System.String)); 
etc. 

Si alguna aplicación de la falla, se produce una excepción. He estado considerando refactorizar para poder incorporar una evaluación no crítica que no arroje una excepción. Algunos como Check.That como una variante de Enforce.That devolvería booleanos, pero tienen métodos de extensión con firmas idénticas.

Lo que me gusta de este enfoque, hasta ahora, es que puedo usar estos en mis pruebas unitarias, así como para las preocupaciones de validación previa y posterior a mi código actual sin hacer referencia a Microsoft.VisualStudio.QualityTools. Montaje UnitTestFramework. Lo puse en mi ensamblado raíz para mi marco de aplicación, y Enforce está en la raíz, por lo que es muy fácil de acceder.

0

Creo que si estás refaccionando tus pruebas para reducir la duplicación, terminas creando tu propio framework como subproducto, y por supuesto tu marco de prueba tendrá ayudantes de confirmación que tengan sentido en tu contexto.

Un ejemplo que tengo en mente era al probar informe XHTML terminamos con las pruebas que parecían algo así como:

assertCoverageEquals(45.5); 

donde detrás de la cobertura afirman era algo así como:

assertPercentage(COVERAGE_ID, 45.5); 

y luego detrás eso era algo que usaba xpath para obtener el valor y otro método que sabía cuál era el formato para los porcentajes.

4

Esa es mi solución:

using MyStuff; 

using A = Microsoft.VisualStudio.TestTools.UnitTesting.Assert; 

namespace Mytestproj.Tests 
{ 
    public static class Assert 
    { 
     public static void AreEqual(object expected, object actual) 
     { 
      A.AreEqual(expected, actual); 
     } 

     // my extension 
     public static void AreEqual(MyEnum expected, int actual) 
     { 
      A.AreEqual((int)expected, actual); 
     } 

     public static void IsTrue(bool o) 
     { 
      A.IsTrue(o); 
     } 

     public static void IsFalse(bool o) 
     { 
      A.IsFalse(o); 
     } 

     public static void AreNotEqual(object notExpected, object actual) 
     { 
      A.AreNotEqual(notExpected, actual); 
     } 

     public static void IsNotNull(object o) 
     { 
      A.IsNotNull(o); 
     } 

     public static void IsNull(object o) 
     { 
      A.IsNull(o); 
     } 
    } 
} 
Cuestiones relacionadas