JUnit es el marco de pruebas unitarias más popular en Java. Se recomienda explícitamente para pruebas unitarias. JUnit no requiere un servidor para probar la aplicación web, lo que agiliza el proceso de prueba.
El marco JUnit también permite la generación rápida y sencilla de casos de prueba y datos de prueba. El paquete org.Junit consta de muchas interfaces y clases para JUnit Testing como Test, Assert, After, Before, etc.
¿Qué es el accesorio de prueba?
Antes de que entendamos qué es un dispositivo de prueba, estudiemos el siguiente código
Este código está diseñado para ejecutar dos casos de prueba en un archivo simple.
OutputFileTest de clase pública {salida de archivo privado;salida = nuevo archivo (…);output.delete ();public void testFile1 () {// Código para verificar el caso de prueba 1}output.delete ();salida = nuevo archivo (…);public void testFile2 () {// Código para verificar el caso de prueba 2}output.delete ();}
Pocos problemas aquí
- El código no es legible
- El código no es fácil de mantener.
- Cuando el conjunto de pruebas es complejo, el código puede contener problemas lógicos.
Compara el mismo código usando JUnit
OutputFileTest de clase pública{salida de archivo privado;@Before public void createOutputFile (){salida = nuevo archivo (…);}@Después de public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// código para el objetivo del caso de prueba}@Test public void testFile2 (){// código para el objetivo del caso de prueba}}
El código es mucho más legible y fácil de mantener. La estructura de código anterior es un accesorio de prueba.
Un accesorio de prueba es un contexto en el que se ejecuta un caso de prueba. Normalmente, los accesorios de prueba incluyen:
- Objetos o recursos que están disponibles para cualquier caso de prueba.
- Actividades requeridas que hacen que estos objetos / recursos estén disponibles.
- Estas actividades son
- asignación ( configuración )
- desasignación ( desmontaje ).
Configuración y desmontaje
- Por lo general, hay algunas tareas repetidas que deben realizarse antes de cada caso de prueba. Ejemplo: crear una conexión a la base de datos.
- Asimismo, al final de cada caso de prueba, puede haber algunas tareas repetidas. Ejemplo: para limpiar una vez finalizada la ejecución de la prueba.
- JUnit proporciona anotaciones que ayudan a configurar y desmontar. Garantiza que se liberen los recursos y que el sistema de prueba esté listo para el siguiente caso de prueba.
Estas anotaciones se analizan a continuación:
Configuración
La anotación @Before se utiliza en un método que contiene código Java para ejecutarse antes de cada caso de prueba. es decir, se ejecuta antes de cada ejecución de prueba.
Desmontaje (independientemente del veredicto)
La anotación @After se usa en un método que contiene código Java para ejecutarse después de cada caso de prueba. Estos métodos se ejecutarán incluso si se arrojan excepciones en el caso de prueba o en el caso de fallas de aserción.
Nota:
- Se permite tener cualquier número de anotaciones enumeradas anteriormente.
- Todos los métodos anotados con @Before se ejecutarán antes de cada caso de prueba, pero pueden ejecutarse en cualquier orden.
- Puede heredar los métodos @Before y @After de una superclase, la ejecución es la siguiente: Es un proceso de ejecución estándar en JUnit.
- Ejecute los métodos @Before en la superclase
- Ejecute los métodos @Before en esta clase
- Ejecute un método @Test en esta clase
- Ejecute los métodos @After en esta clase
- Ejecute los métodos @After en la superclase
Ejemplo: crear una clase con un archivo como accesorio de prueba
OutputFileTest de clase pública{salida de archivo privado;@Before public void createOutputFile (){salida = nuevo archivo (…);}@Después de public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// código para el objetivo del caso de prueba}@Test public void testFile2 (){// código para el objetivo del caso de prueba}}
En el ejemplo anterior, la cadena de ejecución será la siguiente:
- createOutputFile ()
- testFile1 ()
- deleteOutputFile ()
- createOutputFile ()
- testFile2 ()
- deleteOutputFile ()
Supuesto: testFile1 () se ejecuta antes que testFile2 (), lo cual no está garantizado.
Configuración de una sola vez
- Es posible ejecutar un método solo una vez para toda la clase de prueba antes de que se ejecute cualquiera de las pruebas y antes de cualquier método @Before .
- La "configuración única" es útil para iniciar servidores, abrir comunicaciones, etc. Cerrar y volver a abrir recursos para cada prueba lleva mucho tiempo.
- Esto se puede hacer usando la anotación @BeforeClass
@BeforeClass public static void Method_Name () {// código de configuración de clase aquí}
Derribar solo una vez
- Similar a la configuración de una sola vez, también está disponible un método de limpieza de una sola vez. Se ejecuta después de que se hayan ejecutado todos los métodos de casos de prueba y @ Después de que se hayan ejecutado las anotaciones.
- Es útil para detener servidores, cerrar enlaces de comunicación, etc.
- Esto se puede hacer usando la anotación @AfterClass
@AfterClass public static void Method_Name (){// código de limpieza de clases aquí}
Suites de prueba JUnit
Si queremos ejecutar múltiples pruebas en un orden específico, podemos hacerlo combinando todas las pruebas en un solo lugar. Este lugar se llama suites de prueba. En este tutorial se cubrirán más detalles sobre cómo ejecutar conjuntos de pruebas y cómo se usa en JUnit.
Ejecutor de prueba de Junit
JUnit proporciona una herramienta para la ejecución de sus casos de prueba.
- La clase JUnitCore se usa para ejecutar estas pruebas.
- Un método llamado runClasses proporcionado por org.junit.runner.JUnitCore, se utiliza para ejecutar una o varias clases de prueba.
- El tipo de retorno de este método es el objeto Result ( org.junit.runner.Result ), que se utiliza para acceder a la información sobre las pruebas. Consulte el siguiente ejemplo de código para obtener más claridad.
Prueba de clase pública {public static void main (String [] args) {Resultado resultado = JUnitCore.runClasses (CreateAndSetName.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println (result.wasSuccessful ());}}
En el código anterior, el objeto "resultado" se procesa para obtener errores y resultados exitosos de los casos de prueba que estamos ejecutando.
Primer programa JUnit
El conocimiento razonable de SDLC, programación java y los conceptos básicos del proceso de prueba de software ayuda a comprender el programa JUnit.
Comprendamos las pruebas unitarias usando un ejemplo en vivo. Necesitamos crear una clase de prueba con un método de prueba anotado con @Test como se indica a continuación:
MyFirstClassTest.java
package guru99.JUnit;importar org.JUnit.Assert estático. *;import org.JUnit.Test;public class MyFirstClassTest {@Pruebapublic void myFirstMethod () {String str = "JUnit está funcionando bien";asertEquals ("JUnit está funcionando bien", str);}}
TestRunner.java
Para ejecutar nuestro método de prueba (arriba), necesitamos crear un corredor de prueba. En el corredor de pruebas, tenemos que agregar la clase de prueba como parámetro en el método runclasses () de JUnitCore. Devolverá el resultado de la prueba, en función de si la prueba se aprobó o no.
Para obtener más detalles sobre esto, consulte el código a continuación:
package guru99.JUnit;import org.JUnit.runner.JUnitCore;import org.JUnit.runner.Result;import org.JUnit.runner.notification.Failure;TestRunner de clase pública {public static void main (String [] args) {Resultado resultado = JUnitCore.runClasses (MyFirstClassTest.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Resultado ==" + resultado.wasSuccessful ());}}
Producción
Una vez que TestRunner.java ejecuta nuestros métodos de prueba, obtenemos un resultado como fallido o aprobado. Encuentre la explicación de salida a continuación:
- En este ejemplo, después de ejecutar MyFirstClassTest.java , se pasa la prueba y el resultado está en verde.
- Si hubiera fallado, debería haber mostrado el resultado como rojo y la falla se puede observar en el seguimiento de fallas. Vea a continuación JUnit gui:
Resumen :
- JUnit es un marco que admite varias anotaciones para identificar un método que contiene una prueba.
- JUnit proporciona una anotación llamada @Test, que le dice a JUnit que el método public void en el que se usa puede ejecutarse como un caso de prueba.
- Un accesorio de prueba es un contexto donde se ejecuta un caso de prueba
- Para ejecutar múltiples pruebas en un orden específico, se puede hacer combinando todas las pruebas en un solo lugar. Este lugar se llama suites de prueba.
- JUnit proporciona una herramienta para la ejecución de las pruebas donde podemos ejecutar nuestros casos de prueba denominados Test Runner.