¿Las pruebas JUnit valen el tiempo y el esfuerzo? Mi experiencia es que tardan aproximadamente un 30% más de tiempo, pero realmente no encuentran tantos errores.

El principal beneficio de las pruebas unitarias es verificar las regresiones.

El punto no es probar que el código hace lo que se supone que debe hacer. Las pruebas funcionales se acercan a este objetivo porque esas pruebas se definen en un nivel mucho más alto, más cercano a la especificación.

Las pruebas unitarias tampoco ayudan mucho a encontrar problemas en el código. Si el programador que escribe la prueba es el mismo que escribió el código de producción (generalmente el caso), es probable que existan los mismos errores en ambos lugares. Usted obtiene algún beneficio de la “contabilidad de doble entrada”, pero las linters, los compiladores y los sistemas de tipo estático hacen innecesarias muchas preocupaciones.

Cuando desea refactorizar su código (limpiarlo sin cambiar su comportamiento), las pruebas unitarias responden a la pregunta: ¿Mi código se comporta exactamente de la misma manera que la última vez que ejecuté las pruebas? Cuando desea agregar una nueva función y le preocupa que pueda romper accidentalmente una parte diferente del código, las pruebas unitarias pueden asegurarle que no tiene nada de qué preocuparse.

Las pruebas de regresión solo funcionan si confía en sus pruebas. Entonces, si desea obtener los beneficios que describí, debe poner el mismo trabajo en las pruebas, y eso lleva tiempo. Recuperará ese tiempo diez veces más con el tiempo ahorrado durante el mantenimiento.

Tienes razón en que las pruebas unitarias pueden no encontrar tantos errores cuando las escribes. Especialmente si estás escribiendo tanto el código como las pruebas. Sin embargo, sí protegen contra las regresiones y ayudan a los desarrolladores que no escribieron el código a comprenderlo y mantenerlo.

La mayoría de los desarrolladores no escriben guías sobre cómo usar su código. La prueba unitaria puede ser el único ejemplo accesible de cómo usarla. En particular, si el código que realmente lo llama es demasiado complejo, es posible que no arroje ninguna luz sobre cómo se supone que se debe usar la API. Las pruebas unitarias proporcionan ejemplos concisos, concretos y prácticos de cómo usar la API.

El código puede cambiar mucho con el tiempo. Cada cambio incurre en el riesgo de una regresión. Tener pruebas unitarias adecuadas reduce esos riesgos. Si bien el costo inicial de redactar el examen puede ser alto, sus beneficios se pagan durante toda la vida útil del código.

Una cosa a tener en cuenta: es sorprendentemente fácil escribir pruebas unitarias ineficaces. Burlarse en exceso, no probar realmente el código, probar el código incorrecto o una cobertura deficiente del código son problemas comunes en las pruebas unitarias. Cuando esto sucede, las pruebas son realmente un desperdicio. Por eso es importante entender cómo escribir buenas pruebas unitarias.

¿Cómo se encontrarían esos errores si las pruebas JUnit no los encontraran?

¿Qué tipo de prueba estás escribiendo con JUnit?

Cual es tu proceso ¿Estás haciendo TDD o estás escribiendo las pruebas post-hoc?

More Interesting

¿Cuáles son los principales sitios a los que cada programador debería suscribirse?

¿Debo perseguir mi sueño de ser científico o convertirme en ingeniero de software?

¿Qué habilidades le daría cada uno de estos programas de posgrado a un ingeniero de software?

Si se le pidiera que clasificara a las empresas Google, Amazon, Facebook, Microsoft, LinkedIn, Twitter por prestigio para ingenieros de software, ¿cómo clasificaría?

¿Un CV sin información de contacto es un buen movimiento?

¿Todos los ingenieros de software de Google aprendieron el diseño del compilador y la inteligencia artificial en algún momento de su vida?

¿Los desarrolladores web son ingenieros de software?

¿Cuáles son los problemas más desafiantes que encuentra en su trabajo como ingeniero de software?

¿Cuál es el peor desastre que se puede atribuir a la negligencia de un ingeniero de software?

¿En qué casos se utiliza la operación Módulo (%) en la programación?

¿En qué tipo de productos o proyectos trabajan los recién graduados que se unen a Google o Facebook para el puesto de ingeniero de software?

Soy una persona INFP interesada en Informática y Programación. ¿Es bueno para mí si sigo interesado en CS, teniendo en cuenta el hecho de que este campo es menos conquistado por personas de mi tipo de personalidad?

Cómo evaluar la madurez de un equipo de ingeniería de software

¿Cuáles son los errores típicos que hacen los nuevos graduados de doctorado al unirse a Facebook como ingenieros de software?

¿A dónde te puede llevar un ingeniero de software?