Sto usando PetaPoco sul mio progetto corrente come un micro ORM e devo dire che mi piace. Tuttavia, mi sono trovato alle prese con semplice scenario - servizi di test unità che utilizzano PetaPoco.DatabaseCome servizio di unit test che utilizza 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);
}
}
Sto usando IOC (Castle.Windsor) per l'iniezione di entrambi IMyService e PetaPoco.Database ovunque sia necessario.
Ora, quando provo a unità di testare il mio servizio non posso correttamente finta stub PetaPoco.Database al fine di verificare che il metodo Salva stata correttamente invocata. Sto usando NUnit e Rhino.Mocks per test di unità e derisione.
[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();
}
}
Mi rendo conto che questo può essere risolto se estraggo un'interfaccia da PetaPoco.Database e fare il beffardo contro di esso, o virtualizzando i metodi di PetaPoco che voglio prendere in giro, ma il punto è che io non voglio apportare modifiche a PetaPoco affatto.
È fattibile?
Ottimo lavoro @Schotime, questo è esattamente ciò di cui avevo bisogno! Sono curioso però, hai provato a creare richieste di pull alla base di codice originale? – ljubomir
Molte volte, ma ora ho molte più funzionalità come parte della libreria, con molte correzioni di bug quindi sono quasi due separate ora. – Schotime
Sono supportate tutte le funzionalità di petapoco (come i modelli) o mancano le cose? Sembra che anche la tua forcella faccia ciò che questo plugin fa PetaPoco.RelationExtensions. Stai usando lo stesso codice?Mi chiedo come tu non veda di avere alcuna documentazione su alcune delle tue funzionalità, quindi spero di poter utilizzare esempi da altri plugin esistenti. – chobo2