¿Es aceptable si una prueba unitaria se basa en más de un método de la clase que se está probando?

Si el método que está probando modifica el estado interno de su objeto, no hay otra forma de verificarlo. Debe recurrir a llamar a un método de acceso en su prueba unitaria.

Aún así, esto no debería ser algo que estás haciendo en cada prueba. Aunque es bueno agrupar datos con los métodos que operan en ellos en OOP, esas operaciones deberían ser realmente simples.

La mayor parte de la lógica de su aplicación debe estar separada de sus cambios de estado. Las pruebas unitarias son más efectivas en unidades que se comportan funcionalmente. Eso significa que no confían en el estado administrado, no causan efectos secundarios y devuelven un valor basado únicamente en los argumentos que reciben.

Es posible que pueda lograr esto extrayendo utilidades de sus objetos para mover la lógica que está tratando de probar en otro lugar. O también podría extraer un objeto de estado, que podría tropezarse o burlarse en sus pruebas unitarias.

Al final, su pregunta no se trata realmente de escribir mejores pruebas. Se trata de escribir código más comprobable.

Por supuesto. La idea de que una prueba unitaria solo debe probar el método en clase no es de lo que debería tratarse la prueba unitaria. Esto lleva a pruebas unitarias imposibles de mantener porque combina sus pruebas con la implementación del comportamiento de su dominio.

Una prueba unitaria debe probar una sola unidad de comportamiento, no es necesario un solo método o clase. Debería poder refactorizar su código sin tener que -esencialmente- reescribir sus pruebas unitarias.

Vea esta presentación para más información:

More Interesting

¿Cuáles son buenos ejemplos de expresiones regulares?

¿Qué tan común es para un diseñador de interacción convertirse en desarrollador web o ingeniero de software?

¿Cuál es la forma más sencilla de implementar un sistema de mensajería para una aplicación móvil?

¿Cuáles son algunos ejemplos de la Décima Regla de Greenspun en acción?

¿Cuál es el software más sorprendente que has escrito?

¿Cómo se puede preparar el curso en línea Arquitecturas de software orientadas a patrones para software concurrente y en red de Douglas Schmidt?

¿El pensamiento abstracto es realmente importante en la programación hoy en día?

¿Es realmente mejor dedicar tiempo a diseñar correctamente?

¿Cuál es el propósito de las pruebas de software?

¿A los INFP en ingeniería de software o una carrera altamente técnica les gusta lo que están haciendo?

¿Cuáles son las mejores grandes empresas de tecnología y nuevas empresas en etapa avanzada para ingenieros de software en Nueva York?

¿Qué es un procedimiento paso a paso para convertirse en un desarrollador de código abierto de GitHub para un novato completo? ¿Cuáles son los cursos de requisitos previos que debo tomar y cómo debo elegir el mejor proyecto? Además, sugiera algunos proyectos en C ++ / Java.

¿Un gerente de producto necesita experiencia en ingeniería?

¿Cómo implementan Facebook y Google la autenticación de usuarios a través de mensajes de texto?

¿Cómo puede la arquitectura de software afectar tanto el desarrollo de productos como las actividades de gestión de productos?