Tenga en cuenta que esto puede sonar como una pregunta amplia, así que déjenme aclarar. Tengo un repositorio expuesto a través de una interfaz, con dos implementaciones concretas: MockRepository y EntityFrameworkRepository.¿Cómo hacer una prueba de unidad de las operaciones de CRUD en un repositorio?
Ahora, tengo un proyecto Unit-Test para el cual todas las pruebas se pueden ejecutar contra el repositorio ya sea, pasando rápidamente una línea en [TestInitialize]
.
Mi pregunta es básicamente "¿Cómo debo escribir las pruebas".
Esto es lo que tengo:
C reate
// Arrange.
var foo = new Foo { .. };
// Act
Repository.Add(foo);
UnitOfWork.Commit();
// Assert
Assert.IsTrue(foo.Id > 0);
R ECUPERACIÓN D E U
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(foo.Id, fooToGet);
T pdate
// Arrange.
var fooToGet = 1;
var nameToChangeFooTo = "FooBar";
// Act
var foo = Repository.FindSingle(fooToGet);
foo.Name = nameToChangeFooTo;
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(fooRetrievedAgain.Id, fooToGet);
Assert.AreEqual(fooRetrievedAgain.Name, nameToChangeFooTo);
D elete
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
Repository.Remove(foo);
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNull(fooRetrievedAgain);
que está funcionando bien , tanto para el Mock y el repositorio de EF, pero mi principal problema es C (Crear). No estoy seguro de cómo probar una operación Agregar en mi repositorio. No es se siente bien lo que estoy haciendo.
Pasa para el Repositorio de EF, pero para hacerlo pasar en mi Repositorio de Mock tuve que usar el reflejo para actualizar el ID en la colección en memoria (desagradable).
Entonces, ¿podría compartir algunos consejos sobre cuáles son las formas correctas de probar las operaciones CRUD en el patrón de repositorio?
Esta es una aplicación MVC de ASP.NET, .NET 4, C#, Entity Framework 4 y patrones de unidad de trabajo/repositorio.
Gracias.
EDITAR
sólo para aclarar chicos, estos no son todos los unidad de pruebas que tengo. Tengo pruebas de unidad para mi capa de servicio, así como pruebas de reglas de negocio.
Ambos últimos fallarán (y deberían) si mis pruebas de Repositorio anteriores fallan. Ese es el punto aquí, para probar la unidad operaciones muy básicas de mis repositorios. ¿Me equivoco?
¿Qué estás probando aquí? Huele como si estuvieras probando por escribir pruebas. – jfar
@jfar - de hecho, escribí esas pruebas antes de implementar los repositorios (TDD). ¿Estás diciendo que no te molestas en probar tus repositorios? Piense en cuántos errores "sin sentido" se encontrarían en las pruebas comerciales/del sistema. Uno que se puede (y se debe) resaltar durante un testrun con una construcción de CI. ¿No crees? – RPM1984
Y recuerde, estoy probando a través de 'interfaces'. 'Repository' es de tipo' IRepository '. Por lo tanto, lo único que intento hacer es garantizar que mis repositorios puedan realizar operaciones básicas en un almacén de persistencia (ya sea que ese almacén sea un repositorio simulado en memoria o un repositorio EF). –
RPM1984