Come disaccoppiare un livello intermedio e un set di dati per consentire il test dell'unità?

StackOverflow https://stackoverflow.com/questions/153291

  •  03-07-2019
  •  | 
  •  

Domanda

Ho una domanda su SO chiedendo come collegare un livello intermedio a un DataSet.

Ho messo una risposta mostrando ciò che avevo escogitato, ma non sono contento dell'accoppiamento stretto. Ho appena iniziato a provare e trovarlo un buon obiettivo per il mio codice.

In che modo questo codice verrebbe disaccoppiato per consentire il testing dell'unità?

Grazie,
Keith

È stato utile?

Soluzione

IMO; I set di dati sono malvagi. Sono e dovrebbero essere usati solo come database offline. Niente di più, IMO. Tuttavia, ciò che fai nel tuo Data Access Layer (DAL) non dovrebbe davvero influire sul tuo livello aziendale (BL). Vorrei solo usare oggetti (usare le interfacce) tra loro (IList) e quindi usare un'interfaccia per definire il tuo DAL (IRepository) e il nyou può deridere quell'interfaccia per restituire tutto ciò di cui hai bisogno nel tuo BL per test di unità. Unit testing I set di dati sono un'altra bestia, non l'ho mai provato e spero che non debba mai ... Forse un database in memoria è la soluzione migliore lì ...

Oh, e per derisione ho usato RhinoMock con un certo successo. Ti incoraggio anche a guardare gli IoC ( http://www.castleproject.org/ ).

Altri suggerimenti

Hai bisogno di IOC (inversione di controllo) e oggetti finti.

Ti incoraggio a guardare dnrTV episodio 126 con James Kovacs.

Dimostra esattamente cosa stai cercando.

Hai provato Spring.net ? Renderà il tuo codice più pulito e meno accoppiato. Fornisce inoltre classi utili per eseguire i test di integrazione.

Dipende da cosa vuoi testare:

  • Vuoi testare il recupero dei dati dal database?
  • Costruire gli oggetti dai set di dati?
  • Inserisce o aggiorna il database?
  • E così via ...

Ecco un suggerimento:

Un ordine contiene tutti i suoi figli. Questo è un aggregato, un tutto. Ottieni un ordine con i dettagli da un repository:

var order = repository.GetOrderBy(id);

Il repository ottiene i dati dal database:

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

Il repository potrebbe utilizzare un builder per creare l'ordine:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

Dovresti creare un repository come segue:

var repository = new OrderRepository(orderDatabase, orderBuilder);

Ora puoi creare un repository con falsi collaboratori, a seconda di ciò che vuoi testare.

Se hai oggetti entità, puoi usare simulazioni per testare l'unità di livello intermedio.

RWendi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top