TestNG es un marco de prueba para el lenguaje de programación Java creado por Cédric Beust e inspirado en JUnit y NUnit . El objetivo de diseño de TestNG es cubrir una gama más amplia de categorías de prueba: unidad, funcional, de extremo a extremo, integración, etc., con funcionalidades más potentes y fáciles de usar.
Desarrollador (es) | Cédric Beust, el equipo de TestNG |
---|---|
Lanzamiento estable | 7.3.0 / 19 de septiembre de 2020 [1] |
Repositorio | ![]() |
Escrito en | Java |
Sistema operativo | Multiplataforma |
Tipo | Herramienta de prueba unitaria |
Licencia | Licencia de Apache 2.0 [2] |
Sitio web | testng |
Características
Las principales características de TestNG incluyen:
- Soporte de anotaciones.
- Soporte para pruebas controladas por datos / parametrizadas (con
@DataProvider
y / o configuración XML). - Soporte para múltiples instancias de la misma clase de prueba (con
@Factory
) - Modelo de ejecución flexible. TestNG puede ser ejecutado por Ant a través de build.xml (con o sin un conjunto de pruebas definido), o por un complemento IDE con resultados visuales. No hay una
TestSuite
clase, mientras que los conjuntos de pruebas, los grupos y las pruebas seleccionadas para su ejecución se definen y configuran mediante archivos XML. - Pruebas concurrentes: ejecute pruebas en grupos de subprocesos arbitrariamente grandes con varias políticas disponibles (todos los métodos en su propio subproceso, un subproceso por clase de prueba, etc.) y pruebe si el código es seguro para múltiples subprocesos.
- Incorpora BeanShell para mayor flexibilidad.
- Funciones JDK predeterminadas para tiempo de ejecución y registro (sin dependencias).
- Métodos dependientes para la prueba del servidor de aplicaciones. [ aclaración necesaria ]
- Pruebas distribuidas: permite la distribución de pruebas en máquinas esclavas.
Proveedor de datos
Un proveedor de datos en TestNG es un método en una clase de prueba, que proporciona una matriz de valores reales variados a métodos de prueba dependientes.
Ejemplo:
// Este método proporcionará datos a cualquier método de prueba que declare que su proveedor de datos se llama "proveedor1". @DataProvider ( name = "provider1" ) public Object [] [] createData1 () { return new Object [] [] { { "Cedric" , new Integer ( 36 ) }, { "Anne" , new Integer ( 37 ) } }; }// Este método de prueba declara que sus datos deben ser proporcionados por el proveedor de datos llamado "proveedor1". @Test ( dataProvider = "provider1" ) pública vacío verifyData1 ( Cadena n1 , Entero n2 ) { Sistema . fuera . println ( n1 + "" + n2 ); }// Un proveedor de datos que devuelve un iterador de matrices de parámetros. @DataProvider ( nombre = "proveedor2" ) public Iterator < Object []> createData () { return new MyIterator (...); }// Un proveedor de datos con un argumento del tipo java.lang.reflect.Method. // Es particularmente útil cuando varios métodos de prueba usan el mismo // proveedor y desea que devuelva valores diferentes dependiendo de // qué método de prueba está sirviendo. @DataProvider ( nombre = "proveedor3" ) public Object [] [] createData ( Método m ) { System . fuera . println ( m . getName ()); devolver nuevo objeto [] [] { nuevo objeto [] { "Cedric" } }; }
El tipo devuelto de un proveedor de datos puede ser uno de los dos tipos siguientes:
- Una matriz de matriz de objetos (
Object[][]
) donde el tamaño de la primera dimensión es el número de veces que se invocará el método de prueba y el tamaño de la segunda dimensión contiene una matriz de objetos que deben ser compatibles con los tipos de parámetros del método de prueba. - An
Iterator[]>
. La única diferencia conObject[][]
es que un iterador le permite crear sus datos de prueba de forma perezosa. TestNG invocará el iterador y luego el método de prueba con los parámetros devueltos por este iterador uno por uno. Esto es particularmente útil si tiene muchos conjuntos de parámetros para pasar al método y no desea crearlos todos por adelantado.
Soporte de herramientas
TestNG es compatible, listo para usar o mediante complementos, por cada uno de los tres principales IDE de Java: Eclipse , IntelliJ IDEA y NetBeans . También viene con una tarea personalizada para Apache Ant y es compatible con el sistema de compilación Maven . El servidor de integración continua de Hudson tiene soporte integrado para TestNG y puede rastrear y trazar los resultados de las pruebas a lo largo del tiempo. La mayoría de las herramientas de cobertura de código Java , como Cobertura , funcionan a la perfección con TestNG.
Nota: El soporte de TestNG para Eclipse solo está integrado en Eclipse Marketplace para las versiones de Eclipse hasta 2018-09 (4.9). Para versiones posteriores de Eclipse, TestNG debe instalarse manualmente según las instrucciones en el sitio de TestNG. [3]
Reportando
TestNG genera informes de prueba en formatos HTML y XML. La salida XML puede ser transformada por la tarea Ant JUnitReport [4] para generar informes similares a los obtenidos cuando se usa JUnit. Desde la versión 4.6, TestNG también proporciona una API de reportero [5] que permite el uso de generadores de informes de terceros, como ReportNG, [6] PDFngreport [7] y TestNG-XSLT, [8] .
Comparación con JUnit
TestNG tiene una rivalidad de larga data con otra herramienta de prueba JUnit . Cada marco tiene diferencias y ventajas respectivas. Las discusiones de Stack Overflow reflejan esta controversia. [9] [10] [11]
Anotaciones
En JUnit 5, los métodos @BeforeAll y @AfterAll deben declararse como estáticos en la mayoría de las circunstancias. [12] TestNG no tiene esta restricción.
TestNG incluye cuatro pares de anotaciones de configuración / desmontaje adicionales para el conjunto de pruebas y los grupos: @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeGroup y @AfterGroup, @BeforeMethod y @AfterMethod. TestNG también brinda soporte para automatizar la prueba de una aplicación usando selenio.
Ensayos parametrizados
Las pruebas parametrizadas se implementan en ambas herramientas, pero de formas bastante diferentes.
TestNG tiene dos formas de proporcionar valores de parámetros variables a un método de prueba: configurando testng.xml y definiendo un método @DataProvider . [13]
En JUnit 5, la anotación @ParameterizedTest permite pruebas parametrizadas. Esta anotación se combina con otra anotación que declara la fuente de los argumentos parametrizados, como @ValueSource o @EnumSource . El uso de @ArgumentsSource permite al usuario implementar un archivoArgumentsProvider
. [14] En JUnit 4, @RunWith y @Parameters se utilizan para facilitar las pruebas parametrizadas, donde el método @Parameters tiene que devolver un List[]
con los valores parametrizados, que se introducirán en el constructor de la clase de prueba.
Conclusión
Los diferentes usuarios a menudo prefieren ciertas características de un marco u otro. JUnit es más popular y a menudo se envía con IDE convencionales de forma predeterminada. TestNG se destaca por sus opciones de configuración adicionales y su capacidad para diferentes tipos de pruebas. Cuál es más adecuado depende del contexto de uso y los requisitos.
Ver también
Referencias
- ^ | Página de lanzamientos de Project GitHub
- ^ "Licencia Apache versión 2.0" . Enero de 2004. Archivado desde el original el 21 de diciembre de 2013.
- ^ https://marketplace.eclipse.org/content/testng-eclipse
- ^ JUnitReport Archivado el 24 de febrero de 2010 en la Wayback Machine.
- ^ Anuncio de TestNG 4.6
- ^ Lanzamiento final de ReportNG 1.0
- ^ PDFngreport 1.0.0
- ^ Informes de TestNG XSL
- ^ "Junit vs TestNG" . stackoverflow.com.
- ^ "JUnit vs TestNG" . stackoverflow.com. Archivado desde el original el 2 de febrero de 2014.
- ^ "¿Qué marco UnitTest aprender para Java ahora?" . stackoverflow.com.
- ^ "Pruebas de escritura - anotaciones" . junit.org .
- ^ "¿Qué es TestNG?" . qacreators.com.
- ^ "Guía del usuario de JUnit 5" . junit.org .
enlaces externos
- Página de inicio de TestNG