Sono un programmatore PHP che si converte in Python. Si prega di spiegare l'importanza (o la non importanza) dei test unitari. Non ho mai testato unità con PHP! [Chiuso
-
28-10-2019 - |
Domanda
Sono a un certo punto nel mio apprendimento su solido sviluppo software in cui mi rendo conto che il codice "pedal-to-the-medal a velocità leggera e prego per buoni risultati senza piano reale" non funziona.
Sto cercando di sostituire i miei vecchi (e certamente non esattamente grandi) modi con pratiche solide. Non ho mai usato i test unitari prima, e ora oltre a provare a imparare la piramide (che sta andando bene grazie alla documentazione approfondita) sto anche cercando di vedere come i test unitari in generale possono avvantaggiarmi (anche in futuro aggiungi test di integrazione , test di regressione, ecc.). Ho letto questa introduzione a NoseTest http://ivory.idyll.org/articles/nose-intro.html, e (non essere irriverenti) vedo che puoi usare i test unitari per testare espressioni regolari e vedere if a=1; b=1; now does a == b
. Questo è tutto ciò che posso vedere a questo punto. Non ho bisogno di un framework per questo. Posso usare un tester di espressione regolare e un buon senso per "testare". Se ho intenzione di utilizzare i test unitari per vedere se due variabili sono uguali, allora non dovrei creare un test ogni volta che creo una variabile e imposto uguale a qualcosa? Gli esempi dell'articolo sembrano solo un po 'arbitrari.
La mia mente è aperta all'apprendimento dei vantaggi dei test unitari, ma voglio sapere quali sono alcune applicazioni pratiche dei test unitari.
In conclusione: non ho mai usato i test unitari prima, quindi per favore dimmi perché sbaglio e dovrei iniziare a usare i test.
Saluti!!
Soluzione
Il test unitario ti dà un po 'di certezza che il codice soddisfa le tue aspettative. Il test unitario non è un santo graal, è semplicemente uno degli strumenti che puoi usare per raggiungere un buon livello di accuratezza e modularità con il tuo codice.
Il test dell'unità è la tua aspettativa. In altre parole, il test chiamerà o invocherà il pezzo di codice che è in fase di prova, quindi misurerà i risultati (valori di ritorno, ecc.) Rispetto a ciò che si aspettava che accada (o restituisca). Se i risultati non corrispondono a ciò che ti aspettavi, allora hai un test difettoso (la tua aspettativa era sbagliata) o il codice in esame non funziona come pensavi.
Il test unitario è particolarmente utile quando arriva il momento di refactoring o mantenimento del codice. È possibile modificare il codice, eseguire i test unitari e verificare se le modifiche hanno rotto i test.
Per tenerlo breve, anche i test unitari hanno altri vantaggi. Normalmente dovresti essere in grado di eseguirli in modo automatizzato, quindi puoi farli funzionare se fai una build notturna, allora puoi controllare i risultati al mattino. Ciò è particolarmente utile nei team più grandi quando più persone possono cambiare o aggiungere codice. La costruzione del codice in modo adatto ai test unitari porta anche a un approccio più disaccoppiato quando si costruisce l'app, questo riduce l'odore del codice e aiuta con la futura manutenibilità e estensibilità di esso.
Modificare:
Con il test did_earn, ho un codice difficile nei casi di test. Ad esempio, passerei manualmente User5 come param (User5 ha registrato 400 volte) e mi assicurerei che non ottengano il badge, ma User6 (500 accessi) ottiene il badge?
Sì, è esattamente quello che farai. Ciò significa che se si cambia l'implementazione interna di did_earn
Quindi i tuoi test possono dirti immediatamente se soddisfa ancora le tue aspettative (che ritorna solo VERO da 500 accessi in poi). Se stai testando un codice che non è fortemente digitato (come un linguaggio di scripting), dovresti anche considerare il test per ciò che accade se si passa una stringa alla funzione anziché a un numero intero, ecc.
Anche se al momento potrebbe non applicarti beffardo, IOC e Iniezione di dipendenza, che sono tutte tecniche utilizzate pesantemente nei test unitari.