Tengo una posición un tanto controvertida en este caso. Mientras que la duplicación de código debe evitarse tanto como sea posible en el código de producción, esto no es tan malo para el código de prueba. Producción y prueba de código difieren en la naturaleza y la intención:
Código de producción puede permitirse cierta complejidad a fin de ser comprensible/mantenible. Desea que el código esté en el nivel de abstracción correcto y que el diseño sea coherente. Esto está bien porque tienes pruebas para eso y puedes asegurarte de que funcione. La duplicación de código en el código de producción no sería un problema si realmente tuvieras una cobertura de código del 100% en el nivel lógico. Esto es realmente difícil de lograr, por lo que la regla es: evitar la duplicación y maximizar la cobertura del código.
El código de prueba, por otro lado, debe ser lo más simple posible. Debe asegurarse de que el código de prueba en realidad prueba lo que debería. Si las pruebas son complicadas, puede terminar con errores en las pruebas o en las pruebas incorrectas, y no tiene pruebas para las pruebas, por lo que la regla es: mantenerlo simple. Si el código de prueba está duplicado, este no es un gran problema cuando algo cambia. Si el cambio se aplica solo en una prueba, la otra fallará hasta que la solucione.
El punto principal que quiero hacer es que la producción y el código de prueba tienen una naturaleza diferente. Entonces siempre es una cuestión de sentido común, y no estoy diciendo que no debas factorizar el código de prueba, etc. Si puedes factorizar algo en el código de prueba y estás seguro de que está bien, entonces hazlo. Pero para el código de prueba, preferiría la simplicidad a la elegancia, mientras que para el código de producción, preferiría la elegancia a la simplicidad. Lo óptimo es, por supuesto, tener una solución simple y elegante :)
PD: Si realmente no está de acuerdo, por favor deje un comentario.
'Is_Tetris_piece_unable_to_move_left_because_of_a_piece_or_a_wall' – Inverse
Gracias a Dios por la terminación automática. – mpen
@Inverse, seguro, si los guiones bajos lo hacen por usted =) – Rob