JUnit vs TestNG

votos
111

En el trabajo, todavía estamos usando JUnit 3 para ejecutar nuestras pruebas. Hemos estado considerando cambiar a JUnit 4 para que se escriban nuevas pruebas, pero he estado pendiente de TestNG desde hace un tiempo. ¿Qué experiencias han tenido con JUnit 4 o TestNG, y que parece funcionar mejor para un gran número de pruebas? Tener flexibilidad para escribir pruebas también es importante para nosotros, ya que nuestras pruebas funcionales cubren un aspecto amplio y deben redactarse de diversas maneras para obtener resultados.

Las pruebas antiguas no se volverán a escribir ya que hacen bien su trabajo. Sin embargo, lo que me gustaría ver en nuevas pruebas es la flexibilidad en la forma en que se puede escribir la prueba, las afirmaciones naturales, la agrupación y las ejecuciones de prueba fácilmente distribuidas.

Publicado el 09/08/2008 a las 07:31
fuente por usuario
En otros idiomas...                            


14 respuestas

votos
19

Primero diría que no reescribas todas tus pruebas para adaptarlas a la última moda. Junit3 funciona perfectamente bien, y la introducción de anotaciones en 4 no te compra mucho (en mi opinión). Es mucho más importante que ustedes escriban pruebas, y parece que sí.

Use lo que le parezca más natural y lo ayude a hacer su trabajo.

No puedo comentar sobre TestNG b / c. No lo he usado. Pero recomendaría las unidades unitarias , una excelente envoltura para JUnit / TestNG / DBUnit / EasyMock, independientemente de la ruta que tomes. (Es compatible con todos los sabores mencionados anteriormente)

Respondida el 09/08/2008 a las 07:33
fuente por usuario

votos
57

He usado ambos, pero tengo que estar de acuerdo con Justin Standard en que realmente no deberías considerar reescribir tus pruebas existentes en cualquier formato nuevo. Independientemente de la decisión, es bastante trivial ejecutar ambos. TestNG se esfuerza por ser mucho más configurable que JUnit, pero al final ambos funcionan igual de bien.

TestNG tiene una característica clara en la que puede marcar las pruebas como un grupo particular, y luego ejecutar fácilmente todas las pruebas de un grupo específico, o excluir las pruebas de un grupo en particular. Por lo tanto, puede marcar las pruebas que se ejecutan lentamente como en el grupo "lento" y luego ignorarlas cuando desee obtener resultados rápidos. Una sugerencia de su documentación es marcar algún subconjunto como pruebas de "registro" que deben ejecutarse cada vez que se ingresan nuevos archivos. Nunca vi esa característica en JUnit, pero de nuevo, si no la tiene, no la tiene. t REALMENTE lo extraño.

A pesar de todos sus reclamos de alta configuración, me topé con un caso de esquina hace un par de semanas en el que no podía hacer lo que quería hacer ... Desearía poder recordar de qué se trata, pero quería sacarlo a la luz. para que sepas que no es perfecto

La mayor ventaja que tiene TestNG son las anotaciones ... que JUnit agregó en la versión 4 de todos modos.

Respondida el 09/08/2008 a las 08:00
fuente por usuario

votos
18

Hace aproximadamente un año, tuvimos el mismo problema. Pasé algún tiempo considerando qué movimiento era mejor y, finalmente, nos dimos cuenta de que TestNG no tiene "características desastrosas". Es lindo, y tiene algunas características que JUnit 4 no tiene, pero no las necesitamos.
No queríamos que las personas se sintieran incómodas al escribir pruebas mientras conocían TestNG porque queríamos que siguieran escribiendo muchas pruebas.
Además, JUnit es prácticamente el estándar de facto en el mundo de Java. No hay una herramienta decente que no la soporte de manera oficial, puede encontrar mucha ayuda en la web y agregaron muchas funciones nuevas en el último año que demuestran que está activa.

Decidimos quedarnos con JUnit y nunca mirar hacia atrás.

Respondida el 09/08/2008 a las 10:33
fuente por usuario

votos
15

Las tarjetas de sorteo más importantes de TestNG incluyen sus grupos de pruebas de soporte y, lo que es más importante, las dependencias de los grupos de prueba (marcar una prueba como dependiente de un grupo hace que las pruebas simplemente omitan la ejecución cuando el grupo dependiente falla).

Las otras grandes tarjetas de TestNG para mí incluyen parámetros de prueba, proveedores de datos, transformadores de anotación y, más que nada, la comunidad de usuarios vibrante y receptiva.

Mientras que en la superficie uno podría no pensar que todas las características de TestNGs anteriores podrían no ser necesarias, una vez que empiezas a entender la flexibilidad que aportan a tus pruebas, te preguntarás cómo lidiaste con JUnit.

(descargo de responsabilidad: no he usado JUnit 4.x para nada, así que no puedo comentar sobre avances o nuevas funciones allí).

Respondida el 18/08/2008 a las 11:09
fuente por usuario

votos
4

Un par de adiciones a la respuesta de Mike Stone:

1) Lo más frecuente para lo que uso los grupos de TestNG es cuando quiero ejecutar un único método de prueba en un banco de pruebas. Simplemente agrego esta prueba al grupo "phil" y luego ejecuto este grupo. Cuando estaba usando JUnit 3, comentaba las entradas de todos los métodos, excepto el que quería ejecutar en el método "suite", pero luego normalmente me olvidaba descomentarlos antes de registrarme. Con los grupos, ya no tengo este problema.

2) Dependiendo de la complejidad de las pruebas, la migración de pruebas de JUnit3 a TestNG se puede hacer de forma automática con sed y creando una clase base para reemplazar TestCase que permite la importación estática de todos los métodos TestNG assert.

Tengo información sobre mi migración de JUnit a TestNG aquí y aquí .

Respondida el 05/09/2008 a las 20:44
fuente por usuario

votos
6

También una ventaja más de TestNG es el soporte de pruebas paralelas. En nuestra era de multiconferencias, es importante, creo.

También utilicé ambos frameworks. Pero estoy usando Hamcrest para las aseveraciones. Hamcrest le permite escribir fácilmente su propio método de afirmación. Entonces, en lugar de

assertEquals(operation.getStatus(), Operation.Status.Active);

Puedes escribir

assertThat(operation, isActive());

Eso le da la oportunidad de utilizar un nivel más alto de abstracción en sus pruebas. Y esto hace que tus pruebas sean más robustas.

Respondida el 10/01/2009 a las 13:10
fuente por usuario

votos
9

Quería compartir el que encontré hoy. Descubrí que el corredor parametrizado incorporado es bastante crudo en Junit4 en comparación con TestNG (sé que cada marco tiene sus puntos fuertes, pero aún así). Los parámetros @ de la anotación Junit4 están restringidos a un conjunto de parámetros. Encontré este problema al probar el comportamiento válido e inválido para la funcionalidad en la misma clase de prueba. Por lo tanto, se utilizará el primer método público anotado y estático que encuentre, pero puede encontrarlos en cualquier orden. Esto nos lleva a escribir diferentes clases innecesariamente. Sin embargo, TestNG proporciona una manera limpia de proporcionar diferentes tipos de proveedores de datos para todos y cada uno de los métodos. De modo que podemos probar la misma unidad de código con una forma válida e inválida en la misma clase de prueba, colocando los datos válidos / no válidos por separado. Iré con TestNG.

Respondida el 05/08/2009 a las 13:24
fuente por usuario

votos
13

Saludos a todos los anteriores. Algunas otras cosas que he encontrado personalmente me gusta más en TestNG son:

  1. El @BeforeClassde TestNG tiene lugar después de la creación de clases, por lo que no están limitadas por sólo ser capaz de llamar a métodos estáticos de la clase en el mismo.

  2. Pruebas paralelas y parametrizados, tal vez simplemente no tienen suficiente cantidad de una vida ... pero acaba de obtener una patada a escribir una serie de pruebas de Selenium, aceptando un nombre de controlador como parámetro. A continuación, la definición de 3 grupos de pruebas paralelas, 1 cada uno para el IE, FF y Chrome conductores, y viendo la carrera! Originalmente hice 4, pero demasiado muchas de las páginas que he trabajado en romper el HtmlUnitconductor por una razón u otra.

Sí, probablemente necesitará encontrar que la vida. ;)

Respondida el 19/08/2010 a las 14:52
fuente por usuario

votos
2

Me gusta la integración ordenada y fácil de TestNG con Guice.

Respondida el 06/02/2013 a las 14:09
fuente por usuario

votos
2

Su pregunta parece dos plegados a mí. En uno tenía que desea comparar dos marcos de prueba, por el contrario le gustaría aplicar pruebas fácilmente, tienen afirmaciones naturales, etc ...

Ok, en primer lugar JUnit ha estado jugando catchup con TestNG en términos de funcionalidad, que han tendido un puente alguna con lo v4, pero no lo suficientemente bien en mi opinión. Cosas como las anotaciones y dataproviders siguen siendo mucho mejor en TestNG. También son más flexibles en cuanto a la ejecución de la prueba, ya que TestNG tiene dependencia de prueba, agrupar y ordenar.

JUnit todavía requiere cierta antes / después de los métodos a ser estáticos, lo que limita lo que puede hacer antes de la ejecución de las pruebas, TestNG no tiene este problema.

TBH, sobre todo las diferencias entre los dos marcos no significan mucho, a menos que su centrándose en las pruebas de integración / automatización. JUnit de mi experiencia se construye a partir de cero para las pruebas unitarias y ahora está siendo empujado hacia niveles más altos de las pruebas, que la OMI hace que sea la herramienta equivocada para el trabajo. TestNG va bien en las pruebas unitarias y debido a su robusta dataproviding y gran capacidad de ejecución de la prueba, funciona incluso mejor en el nivel de prueba / automatización de la integración.

Ahora, por lo que creo que es un tema aparte, cómo escribir pruebas bien estructurado, legible y fácil de mantener. La mayor parte de esto estoy seguro de que sabe, pero cosas como patrón de la fábrica , del patrón de comando y PageObjects (si sus sitios web de prueba) son vitales, es muy importante tener una capa de abstracción entre lo que su prueba (SUT) y lo que la prueba real es (afirmaciones de la lógica de negocio). Con el fin de tener afirmaciones mucho más agradable, puede utilizar Hamcrest . Hacer uso de la herencia javas / interfaces para reducir la repetición y hacer cumplir común.

Casi lo olvido, también utilizan el patrón de prueba de datos del constructor , esto unido a la anotación de DataProvider TestNG es muy útil.

Respondida el 12/06/2013 a las 10:50
fuente por usuario

votos
2

Mi opinión sobre lo que hace verdaderamente TestNG mucho más poderoso:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.
Respondida el 06/04/2014 a las 17:56
fuente por usuario

votos
4

JUnit 4 Vs TestNG - Comparación de mkyong.com (actualizado en 2013).

Conclusión: Es mejor utilizar TestNG como marco de pruebas de unidad central para el proyecto de Java, porque TestNG es más adelantado en las pruebas Parameterize, pruebas de la dependencia y las pruebas suite (Agrupación de concepto).

TestNG está destinado a, pruebas de alto nivel funcional y prueba de integración compleja. Su flexibilidad es especialmente útil con grandes conjuntos de pruebas.

Además, TestNG también cubre toda la funcionalidad del núcleo junit4 . Es sólo hay razón para que yo use JUnit más.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

Usted puede encontrar comparación más detallada aquí .

Respondida el 29/06/2016 a las 19:38
fuente por usuario

votos
2

Por eso utilizamos TestNG en lugar de JUnit?

  1. La declaración de @BeforeClassy @AfterClassmétodo tiene que ser estático en JUnit mientras que, hay más flexibilidad en TestNG en la declaración del método, no tiene estas limitaciones.

  2. En TestNG, podemos parametrizar pruebas usando 2 formas . @parameter o anotación @DataProvider.

    i) @parameter para los casos simples, donde se requiere una asignación de teclas de valor. (los datos se proporciona a través de archivo XML)

    ii) @DataProvider para los casos complejos. Uso de 2 matriz unidimensional, puede proporcionar datos.

  3. En TestNG, ya @DataProvider método no tiene por qué ser estática, podemos usar varios métodos de proveedor de datos en la misma clase de prueba.

  4. Prueba de Dependencia: En TestNG, si no pasa la prueba inicial, a continuación, todas las pruebas dependientes subsiguientes serán omitidas, no marcado como fallido. Pero JUnit marcado falló.

  5. Agrupación: Las pruebas individuales pueden pertenecer a varios grupos y luego ejecutar en diferentes contextos (como pruebas de lento o rápido). Existe una característica similar en JUnit categorías, pero carece de los @BeforeGroups / anotaciones @AfterGroups TestNG que permiten inicializar el test / desgarro hacia abajo.

  6. Paralelismo: Si desea ejecutar la misma prueba en paralelo en varios subprocesos, TestNG tiene cubierto con un sencillo de usar, mientras que la anotación JUnit no ofrece una forma sencilla de hacerlo fuera de la caja.

  7. TestNG @DataProvider también puede soportar XML para la alimentación de datos, CSV, o incluso archivos de texto sin formato.

  8. TestNG permite declarar las dependencias entre las pruebas, y se salta si la prueba de la dependencia no fue aprobada.

@test (dependsOnMethods = { "dependOnSomething"})

Esta funcionalidad no existe en JUnit

  1. informes:

TestNG informes se generan de forma predeterminada a una carpeta de prueba-salida que incluye informes HTML con todos los datos de prueba, aprobado / no aprobado / omitidos, ¿cuánto tiempo se ejecutan, qué entrada se utilizó y los registros completos de la prueba. Además, también se exporta todo a un archivo XML que se puede utilizar para construir su propia plantilla de informe.

En el frente de JUnit, todos estos datos también está disponible a través de XML, pero no hay ninguna de la presentación de la caja y tiene que depender de plugins.

Enlace de recursos:

  1. Un JUnit rápida vs TestNG Comparación
  2. JUnit vs. TestNG: ¿Qué Framework de Pruebas debes elegir?

Una buena diferencia se da en este lado a lado tutorial: TestNG Vs JUnit: ¿Cuál es la diferencia?

Respondida el 12/12/2017 a las 02:02
fuente por usuario

votos
1

ambos son casi iguales. TestNG tiene algunas featurs adicionales como testsuits y dependecy. Por favor, encontrar el Screeshot adjunta para obtener la comparación completa. completo Juni5 vs TestNG Comparación

Respondida el 23/01/2019 a las 08:48
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more