Ho una posizione alquanto controversa su questo. Mentre la duplicazione del codice deve essere evitata il più possibile nel codice di produzione, non è così male per il codice di test. Produzione e test di codice si differenziano per la natura e l'intento:
Codice di produzione possono permettersi una certa complessità in modo da essere comprensibile/mantenibile. Vuoi che il codice sia al livello di astrazione giusto e che il design sia coerente. Questo è ok perché hai dei test e puoi assicurarti che funzioni. La duplicazione del codice nel codice di produzione non sarebbe un problema se si avesse una copertura del codice del 100% a livello logico. Questo è davvero difficile da raggiungere, quindi la regola è: evitare la duplicazione e massimizzare la copertura del codice.
Il codice di prova d'altra parte deve essere il più semplice possibile. È necessario assicurarsi che il codice di test verifichi effettivamente ciò che dovrebbe. Se i test sono complicati, potresti finire con bug nei test o nei test sbagliati - e non hai test per i test, quindi la regola è: mantienilo semplice. Se il codice di prova è duplicato, questo non è un grosso problema quando qualcosa cambia. Se la modifica viene applicata solo in un test, l'altro non funzionerà finché non lo correggi.
Il punto principale che voglio fare è che la produzione e il codice di prova hanno una natura diversa. Quindi è sempre una questione di buon senso, e non sto dicendo che non dovresti calcolare il codice di test, ecc. Se puoi calcolare qualcosa nel codice di test e sei sicuro che sia ok, allora fallo. Ma per il codice di prova, preferirei la semplicità rispetto all'eleganza, mentre per il codice di produzione, preferirei l'eleganza alla semplicità. L'optimum è ovviamente avere una soluzione semplice ed elegante :)
PS: Se davvero non sei d'accordo, per favore lascia un commento.
'Is_Tetris_piece_unable_to_move_left_because_of_a_piece_or_a_wall' – Inverse
Grazie a Dio per il completamento automatico. – mpen
@Inverse, sicuro, se i caratteri di sottolineatura lo fanno per te =) – Rob