Sì, dovresti testare l'intera catena di eventi come un'unità. Quindi, nel tuo esempio con una procedura che si inserisce in una tabella e provoca l'attivazione di più trigger, è necessario scrivere test unitari che valutano la procedura per vari input. Ogni test unitario dovrebbe superare o fallire a seconda che restituisca i valori corretti, cambi correttamente lo stato delle tabelle, crei l'e-mail corretta e persino invii i pacchetti di rete corretti se è progettato per fare una cosa del genere. In breve, tutti gli effetti dell'unità devono essere verificati.
Hai ragione, che la progettazione di unit test richiede un po 'di lavoro, ma la maggior parte di quel lavoro deve essere fatto per testare manualmente l'unità, stai solo salvando il lavoro necessario per testare l'unità in modo che, quando in futuro viene effettuata una modifica, il test può essere altrettanto completo e significativamente più semplice.
La modifica dei dati rende i test più difficili, ma non rende i test meno importanti e aumenta effettivamente il valore dei test unitari poiché la maggior parte delle difficoltà deve essere considerata solo una volta anziché ogni volta che viene apportata una modifica all'unità. Set di dati salvati, inserimenti / aggiornamenti / eliminazioni che fanno parte dell'installazione / smontaggio e operazioni con ambito ristretto possono essere utilizzati per semplificare tutto ciò. Poiché la domanda non è specifica del database, i dettagli varieranno.
Non esiste una soglia di complessità nella fascia alta o bassa che dovrebbe impedirti di eseguire test o test unitari. Considera queste domande:
- Scrivi sempre un codice privo di bug?
- Le piccole unità sono sempre prive di bug?
- Va bene che un'unità di grandi dimensioni abbia un bug?
- Quanti bug ci vogliono per causare un disastro?
Supponiamo di iniziare un nuovo lavoro e di avere il compito di eseguire un'ottimizzazione su una piccola funzione utilizzata in molti luoghi. L'intera domanda è stata scritta e gestita da un dipendente che nessuno ricorda nemmeno. Le unità hanno documentazione che descrive il normale comportamento previsto, ma poco altro. Quale di questi preferiresti trovare?
- Nessun test unitario in qualsiasi parte dell'applicazione. Dopo aver apportato la modifica, è possibile eseguire alcuni test manuali sull'unità stessa per assicurarsi che restituisca ancora i valori previsti nella documentazione. Puoi quindi distribuirlo alla produzione, incrociare le dita e sperare che funzioni (dopotutto, scrivi sempre codice privo di bug e un'ottimizzazione in un'unità non potrebbe mai influire su un'altra) o impiegare molto tempo a imparare come l'intera applicazione funziona in modo da poter testare manualmente ogni unità direttamente o indirettamente.
- Test unitari in tutta l'applicazione eseguiti automaticamente ogni giorno o su richiesta. Controllano non solo i normali valori di input e la loro risposta prevista, ma anche valori anomali e le eccezioni previste che vengono sollevate. Apportate la modifica ed eseguite la suite di test unitari per l'applicazione, vedendo immediatamente che altre tre unità non restituiscono più i risultati previsti. Due di questi sono benigni, quindi devi modificare i test unitari per renderlo conto. Il terzo richiede un altro leggero aggiustamento e un nuovo test unitario. Dopo aver apportato le modifiche, l'intera suite di test ha esito positivo e si implementa la modifica con sicurezza.