Durante la scrittura di test di integrazione per oggetti di business logic e oggetti di accesso ai dati, cosa ha più senso usare per l'installazione e la validazione? Nel mio caso, sto utilizzando un ORM nell'implementazione della mia interfaccia di accesso ai dati che verrà utilizzata in produzione e terrò conto dell'implementazione di ORM insieme agli oggetti di business logic per i test di integrazione. Dato che l'implementazione ORM è stata testata separatamente utilizzando le istruzioni INSERT e SELECT per l'installazione e la convalida, è meglio per l'installazione e la convalida del test di integrazione utilizzare l'implementazione ORM dell'interfaccia di accesso ai dati, per utilizzare direttamente l'ORM, per utilizzare quelli INSERT e SELECT istruzioni, o per fare qualcos'altro, modifica: e perché?
L'ORM in questo caso è NHibernate, l'implementazione ORM dell'interfaccia di accesso ai dati è un semplice pass-through al provider LINQ di NHibernate che fornisce anche semplici meccanismi di impaginazione e ordinamento. Sono curioso di sapere cosa ne pensi, in generale o con questo specifico scenario.
modifica: non sto cercando di sapere quale DAO dovrei connettere agli oggetti BL. Che chiaramente dovrebbe essere lo stesso DAO che verrà utilizzato nella produzione. La domanda riguarda il meccanismo utilizzato per inserire i dati nel database per impostare il test prima la funzione di business logic è testata. Presumibilmente, lo stesso meccanismo sarebbe usato per interrogare il database dopo la funzione di business logic è stata testata. Ecco alcuni pseudo-codice di altissimo livello per dimostrare cosa intendo:
MyIntegrationTest()
{
Foo fooBefore = GenerateFooForTesting();
SomehowInsertIntoDatabase(foo); // What should be used here and why?
// Plumb things together; actually done using IoC, not hard-coded.
DaoFactory realDaoFactory = GetRealDaoFactory();
BizFactory realBizFactory = GetRealBizFactory();
realBizFactory.DaoFactory = realDaoFactory;
BusinessLogicObject biz = realBizFactory.BuildBusinessLogicObject();
biz.DoBusinessWithFooById(fooBefore.Id);
Foo fooAfter = SomehowGetFooFromDatabase(fooBefore.Id); // Same question.
Assert.AreEqual(5, fooAfter.SomethingThatShouldBeFiveAfterBusinessIsDone);
}