Se i test unitari si sovrappongono sempre

5

Questa è una domanda sul design del test. Ho un "gestore" di classe che accetta un "validatore" che controlla alcune logiche di business su ciò che è passato al gestore.

Ho effettuato i test unitari per il validatore e ora sto scrivendo il test per il gestore. Ovviamente voglio assicurarmi che il validatore venga chiamato quando il gestore fa la sua cosa.

Dovrei testare ancora una volta i casi del validatore o è inutile?

MODIFICA 1:

Fornirò un po 'più di informazioni su ciò che sto cercando di fare qui, poiché sembra che le domande abbiano più di quanto mi aspettassi.

Quello che sto facendo è un servizio per registrare gli utenti per un sito web e ho bisogno di verificare che l'utente abbia fornito esattamente un metodo di contatto tra tre possibili opzioni (email, telefono e indirizzo postale). Questa convalida deve essere eseguita sia quando l'utente si registra nel sito Web e quando l'utente deve reimpostare la sua password nel caso in cui l'abbia dimenticata.

Il metodo che gestisce gli utenti del registro va così.

public Headers HandlePetition(Petition petition)
{
     if (petition == null)
     { throw new ArgumentNullException(); }

     contactPointValidator.ValidateContactPoint(new ContactData
     {
          Email = petition.email,
          PostalAddress = petition.postaladdress,
          Telephone = petition.telephone,
     });

     var response;

     // Do stuff

     return response;
}
    
posta Zalomon 19.04.2016 - 16:39
fonte

3 risposte

0

Pubblicherò il mio ultimo commento alla risposta di fschmengler come risposta poiché penso che sia il modo più adatto per risolvere la mia domanda.

Penso che il mio problema fosse che stavo affrontando il problema nel modo sbagliato: il gestore non dovrebbe convalidare nulla di tutto ciò dal momento che è una logica di bussiness; nemmeno indirettamente come lo sta facendo ora. Sia il gestore che il validatore devono essere incapsulati da una classe superiore che utilizza entrambi. Penso che questo abbia più senso per me.

    
risposta data 20.04.2016 - 11:58
fonte
5

Dovrebbe essere inutile. Ma dovresti fare in modo che il gestore chiami ciò che il validatore deve chiamare.

Per i test delle unità dovresti sottoporti a test da soli. Ciò significa che avrai bisogno di un validatore di stub (o simulacro) da consegnare al gestore quando esegui il test del gestore. Non si controlla la logica di business del validatore durante il test del gestore. Si verifica quel validatore di chiamate handler (in questo caso ValidatorStub) quando, e con cosa, dovrebbe.

    
risposta data 19.04.2016 - 16:55
fonte
3

Obviously I want to make sure that the validator is called when the handler does its thing

Quindi prendi in giro il validatore e verifica che venga chiamato con i parametri corretti. Non è necessario testare il validatore stesso due volte.

Su una nota correlata, i test unitari hanno il loro vero valore nello sviluppo basato su test. Sembra che tu stia scrivendo i test dopo il codice. Forse i test di integrazione sono più adatti a te qui. Quindi testerai il gestore insieme ai validatori o anche a un'unità più grande in un test che verifica se tutto funziona come previsto.

I test di integrazione sono più preziosi per i test di regressione rispetto ai test unitari in quanto sono più propensi a trovare bug da effetti collaterali imprevisti.

    
risposta data 19.04.2016 - 16:52
fonte

Leggi altre domande sui tag