Как выполнить модульное тестирование службы, использующей PetaPoco.Database

Я использую 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.

Это выполнимо?

7
задан IAdapter 27 May 2012 в 19:04
поделиться