Avere un TestContext per testare i metodi invece di Iniezione delle dipendenze

2

Sto lavorando su una base di codice legacy e ho bisogno di trovare un modo per scrivere test unitari per questo progetto.

Il progetto ha un'architettura a tre livelli ( UI-Biz-DAL come li chiamiamo) e DAL è totalmente implementato usando ADO.Net e Typed-Datasets ed è pieno di SQL Scripts .

Le nostre classi Biz hanno metodi che sono responsabili della realizzazione di business logic e dipendono da altre classi helper e classi DAL .

So che posso usare DI per iniettare queste classi nelle mie classi Biz , ma penso che dovrei cambiare un sacco di codice. Ecco una soluzione a cui posso pensare:

Esiste questa classe TestContext che funge da contenitore e può contenere oggetti fittizi per i test ma non ha nulla quando si tratta di eseguire il codice effettivo in modo da poter utilizzare invece oggetti reali, ecco un esempio:

var dal=TestContext.Current.Resolve<IMyDAL>(@default:new MyDal());

come puoi vedere Il metodo Resolve accetta un argomento di tipo IMyDAL che verrà utilizzato in caso di non esecuzione dei nostri test.

Prima mi piacerebbe sapere cosa ne pensi di questa soluzione

Secondo Sto ancora pensando a un modo per testare gli script SQL che sono codificati nel nostro codice base. Come posso testarli?

    
posta Beatles1692 03.01.2016 - 08:04
fonte

2 risposte

1

Quello che stai suggerendo è il DI homebrewed strettamente associato a ciascun oggetto di business e il cablaggio automatico del comportamento corrente.

Just. no. Utilizzare una soluzione DI reale e collegarlo automaticamente al DAL legacy.

Cambia il codice. Stai scrivendo dei test qui, amico, quello è il lavoro del Signore.

    
risposta data 03.01.2016 - 08:13
fonte
1

A seconda della tua versione di studio puoi usare Microsoft Fakes, in particolare shim per essere in grado di deridere la maggior parte delle cose - link .

Una volta che la tua biblioteca è coperta da test, puoi averli come una rete di sicurezza mentre introduci prove DI e completamente isolate.

Il pericolo è che gli shim siano malvagi e possano lasciare che gli sviluppatori se ne vadano con cattive pratiche.

    
risposta data 03.01.2016 - 12:39
fonte

Leggi altre domande sui tag