Mentre ci sono modi per impedire l'esecuzione dei test unitari, qual è il valore del controllo in unit test falliti?
Userò un semplice esempio: Case sensitive. Il codice corrente fa distinzione tra maiuscole e minuscole. Un input valido nel metodo è "Cat" e restituirebbe un enum di Animal.Cat. Tuttavia, la funzionalità desiderata del metodo non dovrebbe fare distinzione tra maiuscole e minuscole. Quindi, se il metodo descritto fosse passato "gatto", potrebbe restituire qualcosa come Animal.Null invece di Animal.Cat e il test unitario fallirebbe. Anche se una semplice modifica del codice farebbe funzionare tutto ciò, un problema più complesso potrebbe richiedere settimane per risolvere, ma identificare il bug con un test unitario potrebbe essere un'attività meno complessa.
L'applicazione attualmente analizzata ha 4 anni di codice che "funziona". Tuttavia, recenti discussioni riguardanti i test unitari hanno riscontrato difetti nel codice. Alcuni necessitano solo di una documentazione esplicita dell'implementazione (es. Maiuscole o minuscole) o di un codice che non esegue il bug in base al modo in cui viene attualmente chiamato. Tuttavia, è possibile creare unit test eseguendo scenari specifici che consentano di visualizzare il bug e che siano input validi.
Qual è il valore del controllo nei test unitari che esercitano il bug fino a quando qualcuno non riesce a risolvere il codice?
Questo test unitario dovrebbe essere contrassegnato con ignora, priorità, categoria ecc. Per determinare se un build ha avuto esito positivo in base ai test eseguiti? Alla fine il test unitario dovrebbe essere creato per eseguire il codice una volta che qualcuno lo corregge.
Da un lato mostra che i bug identificati non sono stati corretti. Dall'altro, potrebbero esserci centinaia di test unitari falliti che compaiono nei log e che eliminano quelli che dovrebbero fallire vs. fallimenti a causa di un check-in di codice sarebbe difficile da trovare.