NUnit frente a xUnit

110

¿Cuáles son las diferencias entre NUnit y xUnit.net ? ¿Cuál es el punto de desarrollar dos de ellos, no solo uno?

He leído que xUnit está siendo desarrollado por el inventor de NUnit:

xUnit.net es una herramienta de prueba unitaria para .NET Framework. Escrito por el inventor original de NUnit

Por otra parte:

NUnit es un marco de pruebas unitarias para todos los lenguajes .Net. La versión de producción actual, la versión 2.6, es la séptima versión principal de esta herramienta de prueba unitaria basada en xUnit

Entonces, ¿dónde está la verdad?

Ruslan
fuente
3
Como ha señalado @Joey, esto no es un duplicado directo de la pregunta vinculada. En este caso, el OP ha entendido mal algo fundamentalmente; a saber, la diferencia entre xUnit.net - la herramienta de prueba unitaria y x Unit - el término generalizado para la clase de marcos de prueba unitaria (nUnit, jUnit, etc.). Votación para reabrir.
Rob Levine

Respuestas:

131

En el momento de escribir esta respuesta, la última versión de NUnit es v3.5 y xUnit.net es v2.1.

Ambos marcos son impresionantes y ambos admiten la ejecución de pruebas en paralelo (aunque de una manera diferente). NUnit existe desde 2002, se usa ampliamente, está bien documentado y tiene una gran comunidad, mientras que xUnit.net es más moderno, más adherente a TDD, más extensible y también una tendencia en el desarrollo de .NET Core. También está bien documentado.

Además de eso, la principal diferencia que noté es la forma en que xUnit.net ejecuta los métodos de prueba. Entonces, en NUnit , tenemos una clase de prueba y un conjunto de métodos de prueba. NUnit crea una nueva instancia de la clase de prueba y luego ejecuta todos los métodos de prueba desde la misma instancia. Mientras que xUnit.net crea una nueva instancia de la clase de prueba para cada uno de los métodos de prueba. . Por lo tanto, no se pueden usar campos o propiedades para compartir datos entre métodos de prueba, lo cual es una mala práctica, ya que nuestros métodos de prueba serían dependientes entre sí, lo que no es aceptable en TDD. Entonces, si usa xunit.net, puede estar seguro de que sus métodos de prueba están completamente aislados.

Sin embargo, si está dispuesto a compartir algunos datos entre sus métodos de prueba, xUnit le permitirá hacerlo. Por lo tanto, de forma predeterminada, todos los métodos de prueba están completamente aislados, pero puede romper este aislamiento en casos específicos intencionalmente. Me gusta esta actitud, por eso me gusta más.

akazemis
fuente
4
Para obtener más detalles, consulte mi última publicación: codopia.wordpress.com/2017/02/20/…
akazemis
2
Lo que escribe sobre la ejecución en paralelo no es cierto. Tal vez fue en el momento de tu publicación pero ahora no lo es. Consulte este xunit.net/docs/running-tests-in-parallel . Dice que los métodos de prueba en una clase nunca se ejecutarán en paralelo.
Gondil
Gracias @Gondil, tienes razón, no ejecutará métodos de una sola clase en paralelo. ajustó el bit de paralelismo
akazemis
1
No estoy seguro de cómo descubrió que xUnit está "bien documentado", ya que claramente no lo hace. Toda la información debe encontrarse a través de fuentes de la comunidad y preguntas de stackoverflow en lugar de buena documentación como lo hace NUnit. Estaba realmente emocionado con xUnit después de su respuesta, pero pensé que NUnit también parece funcionar bien en .NET Core.
CularBytes
1
@Loaderon Lo publiqué hace unos 4 años y he estado usando xunit desde entonces hasta ahora. la documentación y la comunidad son mucho mejores que antes y ahora están más maduras. así que use XUnit con tranquilidad, no necesitará recurrir a NUnit. :)
akazemis
33

Estás confundiendo el nombre de una sola herramienta ( xUnit.net ) con el nombre de toda una clase de marcos de prueba unitarios ( xUnit , la x se refiere a un lenguaje / entorno, por ejemplo, JUnit, NUnit, ...).

Joey
fuente
1
Lástima que esto se haya cerrado, ya que no es un duplicado directo, tiene razón, el OP se ha confundido entre dos términos que son casi iguales.
Rob Levine
He cambiado ligeramente el título para asegurarme de que no haya confusión.
Ruslan
1
No me basé en el título, sino en los segmentos resaltados de las citas en su pregunta. Pero tal vez te entendí mal.
Joey
8

Ventajas de xUnit:

xUnit sigue un nuevo concepto al evitar los métodos antiguos "SetUp" y "TearDown". Nos obliga a usar IDisposable y un constructor como deberíamos hacer como desarrolladores .NET. Además, xUnit tiene un concepto claro de intercambio de contexto.

Contras de xUnit:

La disponibilidad para obtener el contexto de prueba aún no está implementada.

TakinosaJi
fuente
1
¿Qué es el "contexto de prueba" ? ¿Ya se ha implementado?
Peter Mortensen
8

Un beneficio de xUnit es que encuentra pruebas en diferentes clases; los ejecuta en paralelo . Esto puede ahorrarle mucho tiempo si tiene muchos casos de prueba.

Por supuesto, puede desactivar esto o controlar su funcionamiento (número de subprocesos, subprocesos por clase, pruebas por ensamblaje, etc.

Vea esta solución de muestra con dos proyectos de prueba, uno usando xUnit y el otro NUnit .

Puede leer más sobre las pruebas paralelas en xUnit aquí .

Rad
fuente
¿Tiene xunit otras formas de realizar pruebas en la misma clase para que se ejecuten en paralelo?
Magesh