It’s hard and unrealistic to maintain large mock data. It’s is even harder when database structure undergoes changes.
False.
Il test delle unità non richiede dati di simulazione "grandi". Richiede abbastanza dati falsi per testare gli scenari e nient'altro.
Inoltre, i programmatori veramente pigri chiedono agli esperti in materia di creare semplici fogli di calcolo dei vari casi di test. Solo un semplice foglio di calcolo.
Quindi il programmatore pigro scrive un semplice script per trasformare le righe del foglio di calcolo in casi di test unitari. È piuttosto semplice, davvero.
Quando il prodotto si evolve, i fogli di calcolo dei casi di test vengono aggiornati e vengono generati nuovi test unitari. Fallo tutto il tempo. Funziona davvero.
Even with MVVM and ability to test GUI, it’s takes a lot of code to reproduce the GUI scenario.
Che cosa? "Riprodurre"?
Il punto di TDD è progettare cose per Testability (Test Drive Development). Se la GUI è così complessa, deve essere ridisegnata per essere più semplice e più controllabile. Più semplice significa anche più veloce, più manutenibile e più flessibile. Ma per lo più semplice significa più testabile.
I have experience that TDD works well if you limit it to simple business logic. However complex business logic is hard to test since the number of combination of test (test space) is very large.
Può essere vero.
Tuttavia, chiedere agli esperti in materia di fornire i casi di test di base in una forma semplice (come un foglio di calcolo) aiuta davvero.
I fogli di calcolo possono diventare piuttosto grandi. Ma va bene, dal momento che ho usato un semplice script Python per trasformare i fogli di calcolo in casi di test.
E. Ho dovuto scrivere manualmente alcuni casi di test perché i fogli di lavoro erano incompleti.
Tuttavia. Quando gli utenti hanno segnalato "bug", ho semplicemente chiesto quale test case nel foglio di calcolo era sbagliato.
In quel momento, gli esperti in materia avrebbero corretto il foglio di calcolo o avrebbero aggiunto degli esempi per spiegare cosa avrebbe dovuto accadere. Le segnalazioni di bug possono - in molti casi - essere chiaramente definite come un problema di test case. In effetti, dalla mia esperienza, definire l'errore come un caso di test rotto rende la discussione molto, molto più semplice.
Invece di ascoltare gli esperti cercano di spiegare un processo aziendale super-complesso, gli esperti devono produrre esempi concreti del processo.
TDD requires that requirements are 100% correct. In such cases one could expect that conflicting requirements would be captured during creating of tests. But the problem is that this isn’t the case in complex scenario.
Non usare TDD impone assolutamente che i requisiti siano corretti al 100%. Alcuni sostengono che TDD può tollerare requisiti incompleti e mutevoli, in cui un approccio non TDD non può funzionare con requisiti incompleti.
Se non usi TDD, la contraddizione si trova in ritardo nella fase di implementazione.
Se usi TDD, la contraddizione viene trovata precedente quando il codice supera alcuni test e fallisce altri test. In effetti, TDD ti dà una prova di una contraddizione in precedenza nel processo, molto prima dell'implementazione (e degli argomenti durante il test di accettazione degli utenti).
Hai un codice che supera alcuni test e fallisce altri. Osservi solo quei test e trovi la contraddizione. Funziona davvero, molto bene nella pratica perché ora gli utenti devono discutere della contraddizione e produrre esempi concreti e coerenti del comportamento desiderato.