Sebbene esistano modi per evitare l'esecuzione di test unitari, qual è il valore del controllo dei test unitari guasti?
Userò un semplice esempio: Case Sensitivity. Il codice corrente è case sensitive. Un input valido nel metodo è "Cat" e restituisce un enum di Animal.Cat. Tuttavia, la funzionalità desiderata del metodo non dovrebbe essere case sensitive. Quindi se il metodo descritto è stato superato "cat", potrebbe restituire qualcosa come Animal.Null invece di Animal.Cat e il test dell'unità fallirebbe. Anche se un semplice cambio di codice renderebbe questo lavoro, un problema più complesso potrebbe richiedere settimane per risolverlo, ma identificare il bug con un test unitario potrebbe essere un compito meno complesso.
L'applicazione attualmente in fase di analisi ha 4 anni di codice che "funziona". Tuttavia, le recenti discussioni relative ai test unitari hanno trovato difetti nel codice. Alcuni hanno solo bisogno di una documentazione esplicativa sull'implementazione (es. Maiuscole e minuscole) o di un codice che non esegue il bug in base a come viene attualmente chiamato. Ma i test unitari possono essere creati eseguendo scenari specifici che causeranno la visualizzazione del bug e sono input validi.
What is the value of checking in unit tests that exercise the bug until someone can get around to fixing the code?
Questo test dell'unità deve essere contrassegnato con ignore, priorità, categoria ecc. per determinare se una compilazione ha avuto esito positivo sulla base dei test eseguiti? Alla fine il test dell'unità dovrebbe essere creato per eseguire il codice una volta che qualcuno lo ha risolto.
Da un lato mostra che i bug identificati non sono stati corretti. Dall'altro lato, potrebbero esserci centinaia di test unitari falliti che vengono visualizzati nei log e che sfoltiscono quelli che dovrebbero fallire, mentre i guasti dovuti a un check-in del codice sarebbero difficili da trovare.