Sulla logica nei test
There are cases where we could include some logic in the source code in order to help us performing some functional tests or end-to-end tests
I test unitari sono un'area di ingegneria del software in cui le persone sembrano diventare molto dogmatiche. "Fallo in questo modo o non è un test unitario" - questo può interferire con l'esecuzione di test. Le persone hanno argomentato in ogni modo e continueremo a discuterne per un po 'di tempo.
Uno dei miei documenti preferiti sui test è The Way of Testivus - è una lettura buona (e divertente) .
Il fatto è scrivere il test che deve essere scritto . Se ciò significa inserire la logica, allora c'è logica in là.
Il pericolo di questo è chi mette alla prova la logica nei test ( Ipocrisia guidata dai test ? Chi prova il test? ). Il problema è che se la tua logica di test e la tua logica di business sono entrambe infrante, potresti perdere un vero test fallito.
Sul codice con logica di test
Un altro aspetto di questa domanda è il "abbiamo bloccato un codice nel build che va al QA (e presumibilmente alla produzione - perché non si cambia la build dopo averlo dato al QA ...) per fare il proprio lavoro più facile.
C'è un vero pericolo qui.
Quando inserisci il codice di test nella build, è possibile che ne venga dato il solletico in produzione. "Ma non succederà mai" è successo troppo spesso. Il codice ti consente di impostare il timestamp o entrare in un determinato stato che ti permette di impostare alcuni dati senza passare attraverso altri processi.
Queste sono cose cattive . Non farli.
One example could be that we have some test code around date/time logic so that if the testers make server and client time different, this code could help them to perform some tests.
Non farlo. E qui sono piuttosto dogmatico. C'è una differenza tra avere il codice di test unitario che non viene mai inserito in una build di produzione dove è importante eseguire il test ... e il codice che sta per essere prodotto.
Il codice di prova è lì dentro che ti permette di bypassare il normale flusso del codice che un utente dovrebbe fare ha diversi problemi con esso:
-
L'intero processo non è in fase di test. Il tester del controllo qualità sta saltando il codice in un modo che un utente normale non può. Ciò significa che il flusso di lavoro effettivo non viene testato. Hai bloccato i dati in qualche punto tramite un'interfaccia di amministrazione / test che inizializza la struttura prima di usarla ... ma il tuo codice normale no e hai un bug che il QA non troverà.
-
C'è un gancio che può essere utilizzato da qualcun altro. Sappiamo che tutti gli utenti sono gentili e che non vanno a curiosare in posti che non dovrebbero cercare. Certo, hai nascosto di dover tenere premuto lo shift-control-alt e 'cat' allo stesso tempo ... ma non hai mai avuto un gatto in realtà un passo sulla tastiera per farlo in un modo che solo un gatto può. E i gatti non sono i più nefandi degli utenti di tastiera: anche le persone con intenzioni meno ambiziose troveranno questo hook.
Se hai bisogno di un ambiente che rende più facile testare una cosa particolare, configura quell'ambiente. Vuoi che i tester abbiano la possibilità di fare qualche test con il client e il server fuori sincrono? Crea una VM che ricrea facilmente questo ambiente piuttosto che inserire un codice che faccia interpretare al client i suoi timestamp come 30 secondi nel passato (o nel futuro).
Non inserire il codice di test nella build di produzione. Assicurati di testare la build di produzione. Ciò potrebbe richiedere un processo di test più lungo, ma le alternative possono essere pessime (mancare un bug o lasciare che qualcuno usi il software in modo improprio).