Я использую PetaPocoв своем текущем проекте в качестве микро ORM, и я должен сказать, что мне это нравится. . Однако я обнаружил, что борюсь с простым сценарием - службы модульного тестирования, которые используют 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);
}
}
. Я использую IoC (Castle.Windsor) для внедрения обоих IMyService . и PetaPoco.Database, где это необходимо.
Теперь, когда я пытаюсь выполнить модульное тестирование своего сервиса, я не могу правильно имитировать заглушку PetaPoco.Database, чтобы убедиться, что метод Saveбыл правильно вызван. Я использую NUnitи Rhino.Mocksдля модульного тестирования и имитации.
[TestFixture]
public class MyServiceTests
{
private PetaPoco.Database _database;
[SetUp]
public void SetUp()
{
_database = MockRepository.GenerateMock("");
}
[Test]
public void ShouldProperlySaveSomething()
{
//Arrange
var myObject = new MyObject();
_database.Expect(db => db.Save(Arg.Is.Anything));
var myService = new MyService(_database);
//Act
myService.SaveSomething(myObject);
//Assert
_database.VerifyAllExpectations();
}
}
Я знаю, что это может быть решено, если я извлеку интерфейс из PetaPoco.Databaseи сделаю над ним издевательство, или виртуализируя методы PetaPoco, которые я хочу имитировать, но дело в том, что я вообще не хочу вносить изменения в PetaPoco.
Это выполнимо?