Prueba de java online nivel inicial. Pruebas del programa, JUnit. Requisitos previos de la prueba de Java

Creo que el desarrollo de software es más que un trabajo. Me veo como un artesano que intenta ser mejor cada día. La forma "más fácil" de hacerlo es encontrar algunas buenas herramientas y responder las siguientes preguntas:

  • ¿Cuándo debo utilizar la Herramienta X?
  • ¿Cómo debo utilizar la herramienta X?

Las pruebas automatizadas son una parte muy importante del desarrollo de software, pero hay pocas publicaciones en los blogs de programadores sobre las herramientas utilizadas. Este mismo artículo te permitirá consultar mi “caja de herramientas”. Cubriré 12 bibliotecas y marcos que utilizo para escribir pruebas unitarias y de integración, y proporcionaré enlaces a páginas que le ayudarán a comprender cómo utilizarlos.

Miremos en mi caja de herramientas

Antes de poder utilizar las herramientas que se describen a continuación, debe configurar una compilación que ejecute automáticamente pruebas unitarias y de integración. Tengo 2 notas sobre este tema:

  • Las pruebas de integración con Maven describen cómo podemos configurar una compilación de Maven con integración y pruebas unitarias en diferentes directorios.
  • Introducción a Gradle: las pruebas de integración con el complemento TestSets cubren lo mismo para Gradle.

Ahora estás listo para echar un vistazo más de cerca a mis herramientas. Los he dividido en categorías para que te resulte más fácil navegar.

Entonces, aquí hay 12 herramientas que utilizo para integración y pruebas unitarias.

Ejecución de pruebas

AssertJ proporciona una API flexible para escribir afirmaciones con mensajes de error útiles, mejora la legibilidad del código de prueba y le permite convertir las pruebas en especificaciones ejecutables que se adhieren al lenguaje específico del dominio deseado.

Además:

  • El uso de Hamcrest en pruebas cubre cómo usar Hamcrest para escribir pruebas, así como también cómo ampliar sus capacidades con módulos personalizados.
  • Convertir aserciones en un lenguaje específico de dominio explica cómo crear aserciones personalizadas en AssertJ.
  • Redacción de pruebas limpias: sustitución de afirmaciones por lenguaje específico de dominio. Explica por qué deberíamos reemplazar las afirmaciones estándar de JUnit con las nuestras que usan un lenguaje específico de dominio adecuado.

Prueba de código de acceso a datos

Base de datos rápida, útil para escribir pruebas de integración que se ejecutan en máquina local desarrollador.

Una extensión de JUnit que se puede utilizar para inicializar la base de datos a un estado conocido antes de ejecutar cada prueba de integración y completar la base de datos con los datos necesarios. DbUnit tiene sus inconvenientes, pero es muy Herramienta útil, que le permite separar los datos de prueba y el código de prueba.

Además:

  • describe los componentes clave de DbUnit que necesita conocer para escribir pruebas utilizando DbUnit.
  • proporciona cinco reglas para escribir las mejores pruebas para el código de acceso a datos.

Mientras buscaba tareas de prueba para programadores de Java, encontré un sitio interesante (los usuarios de Avast no deberían ir, se detecta un script troyano, otros aparentemente están bien): http://www.betterprogrammer.com. Pone a prueba las calificaciones de los programadores de Java de la forma más sencilla, pero de forma automática: ofrece escribir varias funciones (métodos) de complejidad creciente y copiar el código en TextArea. A continuación, el motor del sitio hace algo con las tareas (nada menos que una prueba unitaria), calcula un determinado índice de calificación basándose en los criterios de "velocidad-calidad" y da la puntuación final de la siguiente forma:

Entonces comienzan las preguntas. Yo mismo programé en Java por segunda vez en mi vida (y por lo tanto simplemente me salté tareas complejas), por lo que el 82% en esta prueba corresponde al nivel programador no java. Entonces, ¿cuánto debería reclutar Java Junior, Java Programmer y aún más Java Senior? ¿Qué resultado puedes esperar de presente programador java - 90, 95, 99? Y finalmente, ¿qué pasa si el “programador” obtiene menos de 82 puntos, pero aun así solicita algún tipo de trabajo?

Las pruebas no siempre son divertidas e interesantes. Este proceso suele ser bastante largo y en ocasiones lleno de trabajo monótono. Parece que recientemente los programadores utilizaron una salida estándar o un depurador para probar las clases de Java.

En este artículo describiré la biblioteca JUnit 4, que simplifica y automatiza enormemente el proceso de redacción de pruebas.

Para demostrar las capacidades principales de JUnit Framework, escribamos una clase primitiva en Java y burlémonos de ella. Esta clase tendrá dos métodos: encontrar el factorial de un número no negativo y la suma de dos números. Además, la instancia de clase contendrá un contador de llamadas a métodos.

Clase pública MathFunc ( int llamadas; public int getCalls() ( devolver llamadas; ) public long factorial(int número) ( llamadas++; if (número 1) ( for (int i = 1; i

Ahora escribamos pruebas unitarias. Para hacer esto, crearemos una clase con varios métodos de prueba. Naturalmente, una clase también puede contener métodos auxiliares ordinarios. Para que el corredor de pruebas determine quién es quién, los métodos de prueba deben anotarse con @Test.

Una anotación puede tener los siguientes parámetros:

  • esperado: indique qué excepción generará el método (consulte el ejemplo a continuación);
  • tiempo de espera: después de qué tiempo en milisegundos la prueba dejará de ejecutarse y se considerará fallida.

Si desea indicar que se debe omitir una determinada prueba, márquela con la anotación @Ignore. Aunque puedes simplemente eliminar la anotación @Test.

Puede haber ocasiones en las que necesite algo de contexto, como instancias de clase creadas previamente, para ejecutar cada caso de prueba. Y después de la ejecución, es necesario liberar los recursos reservados. En este caso necesitarás las anotaciones @Before y @After. El método marcado con @Before se ejecutará antes de cada caso de prueba y el método marcado con @After se ejecutará después de cada caso de prueba.

Si la inicialización y liberación de recursos debe realizarse solo una vez (antes y después de todas las pruebas, respectivamente), utilice un par de anotaciones @BeforeClass y @AfterClass.

Y aquí está la clase de prueba con varios scripts de prueba:

Clase pública MathFuncTest ( matemáticas MathFunc privadas; @Antes de public void init() ( math = new MathFunc(); ) @Después de public void tearDown() ( math = null; ) @Test llamadas públicas void() ( afirmarEquals(0, math .getCalls()); math.factorial(1); afirmarEquals(1, math.getCalls()); math.factorial(1); afirmarEquals(2, math.getCalls()); ) @Test public void factorial() ( afirmarTrue(math.factorial(0) == 1); afirmarTrue(math.factorial(1) == 1); afirmarTrue(math.factorial(5) == 120); ) @Test(esperado = IllegalArgumentException.class) public void factorialNegative() ( math.factorial(-1); ) @Ignore @Test public void todo() ( afirmarTrue(math.plus(1, 1) == 3); ) )

El método de llamadas prueba la validez del contador de llamadas. El método factorial comprueba si el factorial se calcula correctamente para algunos valores estándar. El método factorialNegative comprueba que se generará una excepción IllegalArgumentException para valores factoriales negativos. El método todo será ignorado. Intente eliminar la anotación @Ignore cuando experimente con el código.

El método afirmarTrue comprueba si el resultado de una expresión es verdadero. Algunos otros métodos que pueden resultar útiles:

  • afirmarEquals: el resultado esperado y el resultado recibido coinciden;
  • afirmarNull: el resultado de la expresión es nulo;
  • afirmarNotNull: el resultado de la expresión es diferente de nulo;
  • afirmarSame: los objetos esperados y recibidos son el mismo objeto.
  • fallar: el método genera una excepción AssertionError: lo agregamos donde no debería ir la ejecución del programa.

En nuestro mundo moderno Los IDE pueden encontrar y simplemente ejecutar pruebas en un proyecto. Pero, ¿qué pasa si desea ejecutarlos manualmente utilizando el código del programa? Para hacer esto, puede usar Runner, hay versiones de texto: junit.textui.TestRunner, versiones gráficas: junit.swingui.TestRunner, junit.awtui.TestRunner.

Pero un poco más método moderno es el uso de la clase JUnitCore. Agregue el siguiente método principal a la clase MathFuncTest:

Public static void main (String args) lanza una excepción ( JUnitCore runner = new JUnitCore(); Resultado resultado = runner.run(MathFuncTest.class); System.out.println("ejecutar pruebas: " + result.getRunCount()); System.out.println("pruebas fallidas: " + resultado.getFailureCount()); System.out.println("pruebas ignoradas: " + resultado.getIgnoreCount()); System.out.println("éxito: " + resultado .fue exitoso()); )

Y el resultado de la ejecución:

Ejecutar pruebas: 3 pruebas fallidas: 0 pruebas ignoradas: 1 éxito: verdadero

En mas versiones anteriores Para escribir una clase de prueba JUnit, era necesario crear un descendiente de junit.framework.TestCase. Luego fue necesario definir un constructor que toma un String como parámetro (el nombre del método) y lo pasa a la clase padre. Cada método de prueba tenía que comenzar con la prueba de prefijo. Los métodos setUp y tearDown se utilizaron para inicializar y liberar recursos. En definitiva, horror. Bueno, ahora todo es sencillo, sí.

Eso es todo por hoy. Estoy seguro de que JUnit Framework te ayudará mucho. Comentarios y preguntas sobre el artículo son bienvenidos.




Arriba