Primero, pregúntese "¿Por qué las pruebas unitarias son difíciles de escribir para mi código real?" Quizás la respuesta es que su código real está haciendo demasiado. Si tiene un único módulo de código lleno de declaraciones "nuevas" y declaraciones "if" y declaraciones "switch" y declaraciones matemáticas inteligentes y acceso a la base de datos, va a ser doloroso escribir una prueba, y mucho menos probar adecuadamente la lógica y el mates. Pero si sacaste las declaraciones "nuevas" en un método de fábrica, podrías obtener fácilmente objetos falsos para probar.Si sacó las cláusulas "si" y "cambia" las declaraciones en patrones de máquina de estado, no tendría tantas combinaciones para probar. Si elimina el acceso a la base de datos a un objeto proveedor de datos externo, puede proporcionar datos de prueba simples para ejecutar sus instrucciones matemáticas. Ahora está probando la creación de objetos, las transiciones de estado y el acceso a los datos, todo por separado de sus ingeniosas afirmaciones matemáticas. Todos estos pasos se simplificaron simplificándolos.
Un código de razón clave es difícil de probar, ya que contiene "dependencias internas", como las dependencias que crea o las dependencias de las bibliotecas. Si su código dice "Foo theFoo = new Foo();" no puedes sustituir fácilmente un MockFoo para probarlo. Pero si su constructor o método solicita que se transfiera el FOO en lugar de construirse a sí mismo, su arnés de prueba puede pasar fácilmente en un MockFoo.
Cuando escribe código, pregúntese "¿cómo puedo escribir una prueba de unidad para este código?" Si la respuesta es "es difícil", puede considerar modificar su código para que sea más fácil realizar la prueba. Lo que hace es hacer que su unidad pruebe el primer consumidor real de su código: está probando la interfaz de su código al escribir la prueba.
Al modificar sus interfaces para hacerlas más fáciles de probar, se encontrará mejor adhiriéndose a los principios orientados a objetos de "cohesión ajustada" y "acoplamiento libre".
La prueba de la unidad no se trata solo de las pruebas. Las pruebas de unidad de escritura realmente mejoran sus diseños. Avanza un poco más en el camino y terminarás con el desarrollo impulsado por prueba.
¡Buena suerte!
En realidad, es un poco de pollo y huevo. No puede escribir buenas pruebas unitarias sin un código bien diseñado (comprobable). No se puede diseñar bien el código (comprobable) sin haber probado una prueba de unidad. –
+1, especialmente para 'forzar esos principios en su código'. De hecho, una vez leí un artículo que sugería que la escritura de código para que sea fácilmente comprobable por la unidad reducía las tasas de errores más que implementar las pruebas. El hecho de factorizar su código en unidades fácilmente comprobables hace que la corrección sea más obvia y reduce la posibilidad de errores. Pensar cómo va a probar algún código hace que lo escriba en una forma más modular. Ciertamente lo he notado en mi código. De repente, la imitación y la inyección de dependencia caen en su lugar. –