Estoy usando PetaPoco en mi proyecto actual como un micro ORM y debo decir que me gusta. Sin embargo, me encontré luchando con sencillo escenario - servicios de pruebas de unidad que utilizan PetaPoco.DatabaseCómo probar el servicio de unidad que está utilizando PetaPoco.Database
public class MyService : IMyService
{
private readonly PetaPoco.Database _database;
public MyService(PetaPoco.Database database)
{
_database = database;
}
public void SaveSomething(MyObject myObject)
{
//...custom logic
_database.Save(myObject);
}
}
estoy usando COI (Castle.Windsor) para la inyección de ambos IMyService y PetaPoco.Database donde sea necesario.
Ahora, cuando intento unidad de probar mi servicio no puedo adecuadamente talón de simulacro PetaPoco.Database con el fin de verificar que el método Guardar se invocó correctamente. Estoy usando NUnit y Rhino.Mocks para pruebas unitarias y burlas.
[TestFixture]
public class MyServiceTests
{
private PetaPoco.Database _database;
[SetUp]
public void SetUp()
{
_database = MockRepository.GenerateMock<Database>("");
}
[Test]
public void ShouldProperlySaveSomething()
{
//Arrange
var myObject = new MyObject();
_database.Expect(db => db.Save(Arg<MyObject>.Is.Anything));
var myService = new MyService(_database);
//Act
myService.SaveSomething(myObject);
//Assert
_database.VerifyAllExpectations();
}
}
Soy consciente de que esto puede ser resuelto si extraigo una interfaz de PetaPoco.Database y hacer la burla en contra de ella, o mediante la virtualización de los métodos de PetaPoco que quiero para burlarse, pero el punto es que yo No quiero hacer cambios en PetaPoco en absoluto.
¿Es esto factible?
¡Gran trabajo @Schotime, eso es exactamente lo que necesitaba! Aunque tengo curiosidad, ¿ha intentado crear solicitudes de extracción para la base de código original? – ljubomir
Muchas veces, pero tengo muchas más funciones como parte de la biblioteca ahora, con muchas correcciones de errores, por lo que ahora están casi dos separadas. – Schotime
¿Son compatibles todas las características de petapoco (como plantillas) o falta algo? Parece que tu fork también hace lo que hace este complemento PetaPoco.RelationExtensions. ¿Estás usando el mismo código?Me pregunto si no tiene documentación sobre algunas de sus funciones, por lo que espero poder utilizar ejemplos de otros complementos existentes. – chobo2