Las pruebas a nivel de clase ejercen las interacciones entre los métodos de una clase o un pequeño clúster de clases. La finalidad es verificar que la clase soporta todos los casos de uso que los clientes necesitan y que es lo suficientemente solvente para manejar secuencias de métodos inesperadas.
Utilice el patrón de prueba basado en casos prácticos para generar un caso de prueba simple para la clase. Por ejemplo, podría invocar un constructor y una serie de métodos que representan los flujos más comunes para esa clase. Una vez generada la prueba, añada un punto de inicialización y defina algunos valores de datos de prueba por omisión para los parámetros del constructor. En este caso práctico simple, por ejemplo, podría añadir un punto de inicialización para establecer el valor del objeto como nulo. Esto permite al colector de basura destruir el objeto y, por consiguiente, ejercer el código de destructor en la nueva clase.
Ejecute la prueba para asegurarse de que todo funciona correctamente. En este caso, la prueba deberá aprobarse la primera vez ya que no ha definido valores esperados para el constructor. Si no entiende los resultados, utilice el depurador. Siga ejecutando la prueba hasta que se apruebe.
Al probar una clase, el caso de prueba toma el cometido de uno de los consumidores de la clase. Asegúrese de invocar una serie de métodos del script de comportamiento de prueba al igual que cualquier otro consumidor de la clase.
Utilice técnicas de división de datos para definir datos de prueba adecuados.
Defina varias acciones de validación por todo el flujo. Cada acción de validación deberá comprobar que las acciones ejecutadas desde la última validación han modificado el componente sometido a prueba de la manera correcta.
Ejecute la prueba las veces necesarias hasta que se apruebe.
Defina varias variaciones de caso de uso definiendo distintos casos prácticos de prueba. Utilice el análisis de cobertura de vías de acceso basadas en estado como ayuda para idear distintos casos de uso posibles. Para definir variaciones de prueba, puede copiar una prueba existente o crear una nueva.
Lo más probable es que los casos prácticos que ha definido hasta ahora reflejen los flujos que un usuario de la clase utilizará algún día. También vale la pena tener en cuenta los flujos inesperados. El objetivo aquí es comprobar que la clase puede manejar secuencias inesperadas de métodos y asegurarse de que el objeto no se corrompe.
Para probar casos prácticos menos comunes, defina algunas propiedades que deberán ser verdaderas durante toda la vida útil del objeto. (Estas propiedades se denominan invariantes.) Defina secuencias aleatorias de llamadas a método y, al final de la prueba, defina una acción de validación para comprobar que se ha respetado la invariante.
Para evaluar la cobertura de la prueba, vaya a la vista Cobertura en la perspectiva Perfilado y observe la cobertura de los métodos que estaba probando. Si se ha cubierto menos del 100% de las líneas, añada nuevos casos prácticos. Encontrará detalles sobre cómo supervisar la cobertura de código en la Ayuda en línea.
Para decidir qué conjuntos de datos deben añadirse, identifique las líneas de código que no se han cubierto. Normalmente esas líneas están relacionadas con decisiones del código, tales como sentencias if. A menudo, como la condición siempre se evalúa como falsa, el bloque de código que sigue a la decisión no queda cubierto. Para cubrir este bloque de código, es necesario entender el caso de uso que la sentencia de decisión debería cubrir y crear una prueba que represente ese caso de uso.