NUnit vs. MbUnit vs. MSTest vs. xUnit.net [cerrado]

390

Existen bastantes marcos de pruebas unitarias para .NET. Encontré esta pequeña comparación de características: http://xunit.github.io/docs/comparisons.html

Ahora debo elegir el mejor para nosotros. ¿Pero cómo? ¿Importa? ¿Cuál es la prueba más futura y tiene un impulso decente detrás? ¿Debería preocuparme por las características? Si bien xUnit parece ser el más moderno y específicamente diseñado para .NET, NUnit nuevamente parece ser el que está ampliamente aceptado. MSTest nuevamente está integrado en Visual Studio ...

bitbonk
fuente
11
Esa tabla de comparación está desactualizada. Por ejemplo, NUnit también tiene Assert.Throws, etc., y todo en la tabla Assertions es la antigua API. El nuevo Assert.That (..., Is ....) fluida sintaxis es mucho más agradable, y ha estado presente por un buen tiempo.
Jim Cooper
11
¿Conoces alguna tabla que esté más actualizada?
bitbonk
1
Finales de 2013, se mudó de xUnit.net => NUnit. También tenga en cuenta que xUnit.NET (el proyecto)! = XUnit (la categoría, de la cual NUnit es miembro)
DeepSpace101
3
@ ¿Por qué te mudaste de xUnity.net => NUnit?
Alexander Logger el
2
Pregunta similar realizada en 2014 Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim

Respuestas:

197

Sé que este es un hilo viejo, pero pensé en publicar un voto por xUnit.NET . Si bien la mayoría de los otros marcos de prueba mencionados son prácticamente iguales, xUnit.NET ha adoptado un enfoque bastante único, moderno y flexible para las pruebas unitarias. Cambia la terminología, por lo que ya no define TestFixtures and Tests ... especifica Facts and Theories acerca de su código, que se integra mejor con el concepto de qué es una prueba desde una perspectiva TDD / BDD.

xUnit.NET también es EXTREMADAMENTE extensible. Sus clases de atributo FactAttribute y TraitAttribute no están selladas, y proporcionan métodos base reemplazables que le dan mucho control sobre cómo deben ejecutarse los métodos que decoran esos atributos. Si bien xUnit.NET en su forma predeterminada le permite escribir clases de prueba que son similares a los accesorios de prueba de NUnit con sus métodos de prueba, no está limitado a esta forma de prueba unitaria. Usted es libre de extender el marco para admitir las especificaciones de preocupación / contexto / observación de estilo BDD, como se muestra aquí .

xUnit.NET también admite pruebas de estilo de ajuste directamente de fábrica con su atributo de teoría y los atributos de datos correspondientes. Los datos de entrada de ajuste se pueden cargar desde Excel, la base de datos o incluso una fuente de datos personalizada, como un documento de Word (al extender el atributo de datos base). Esto le permite capitalizar en una única plataforma de prueba tanto para pruebas unitarias como para pruebas de integración, que puede ser enorme para reducir las dependencias del producto y la capacitación requerida.

También se pueden implementar otros enfoques para las pruebas con xUnit.NET ... las posibilidades son bastante ilimitadas. Combinados con otro marco burlón muy avanzado, Moq , los dos crean una plataforma muy flexible, extensible y potente para implementar pruebas automatizadas.

jrista
fuente
35
Si bien esto fue cierto hace más de un año, NUnit ha agregado la mayoría de los atributos en cuestión. En NUnit puedes escribir pruebas de cualquier manera.
Mark Levison el
8
No se trata tanto de qué atributos están disponibles, sino de cómo se pueden usar. xUnit.NET fue diseñado desde cero para ser un marco altamente flexible y extensible que no lo encerró en ningún método particular de prueba, y no requiere que actualice regularmente el marco central para obtener las últimas capacidades.
jrista
99
1. Nombres ligeramente diferentes en los atributos no tienen mucho sentido. 2. NUnit era extensible y sigue siendo extensible:? 3. los parámetros de fila de datos para pruebas son compatibles con nunit. Hace un tiempo, eran compatibles con una extensión :) 4. Nunit combinado con Moq crea lo mismo. 5. Para BDD, diría que el flujo de especificaciones se integra fácilmente con muchos marcos de prueba de unidades.
graffic
8
Me gusta el sonido de xUnit, sin embargo, tiene documentación nula :(
Coronel Panic
10
¡xUnit no tiene documentación alguna! por ejemplo: intente encontrar lo que Traitrealmente hace o si puede agrupar diferentes pruebas dentro de la prueba para padres solteros (por ejemplo, todas testsdentro de a testfixture). nUnit crea una gran vista jerárquica en lugar de la vista plana de pruebas de xUnit. Además, la nomenclatura no tiene sentido: ¿hechos y teoría? ¡Ser realista! Esos son mejor llamados pruebas y datos.
DeepSpace101
134

NUnit es probablemente el más compatible con las herramientas de terceros. También ha existido por más tiempo que los otros tres.

Personalmente, no me importan mucho los marcos de prueba de unidad, las bibliotecas burlonas son en mi humilde opinión mucho más importantes (y te encierran mucho más). Solo elige uno y quédate con él.

Alexander Kojevnikov
fuente
3
¿Cuál es tu mejor selección de biblioteca simulada?
dplante 05 de
31
Me gusta Moq, RhinoMocks también es bueno.
Alexander Kojevnikov
55
También podría valer la pena revisar Pex y lunares, la parte de lunares es especialmente útil para burlarse.
Charles Prakash Dasari
44
MSPec con FakeItEasy ... haciendo los casos de prueba más legibles
Robie
55
MSpec con NSubstitute y AutoFixture es mi elección.
Daniel Hilgarth
108

No iría con MSTest. Aunque es probablemente la prueba más futura de los marcos con Microsoft detrás, no es la solución más flexible. No funcionará solo sin algunos hacks. Por lo tanto, ejecutarlo en un servidor de compilación que no sea TFS sin instalar Visual Studio es difícil. El visual studio test-runner es en realidad más lento que Testdriven.Net + cualquiera de los otros frameworks. Y debido a que las versiones de este marco están vinculadas a las versiones de Visual Studio, hay menos actualizaciones y, si tiene que trabajar con un VS anterior, está vinculado a un MSTest anterior.

No creo que importe mucho cuál de los otros frameworks utilizas. Es realmente fácil cambiar de uno a otro.

Yo personalmente uso XUnit.Net o NUnit dependiendo de la preferencia de mis compañeros de trabajo. NUnit es el más estándar. XUnit.Net es el marco más delgado.

Mendelt
fuente
36
He sido arrastrado pateando y gritando a esta misma conclusión. Realmente quería usar MSTest debido a su integración con Visual Studio, pero esa también es su debilidad. Necesito ejecutar pruebas en un servidor de compilación que no sea de Microsoft y no hay forma de que instale Visual Studio en él solo para obtener eso. Es una pena que Microsoft produzca excelentes herramientas y luego las vuelva casi inalcanzables.
Tim Long
11
+1 por llamar a lo horrible que es MSTest. Al final del día, no importa qué marco de prueba de unidad utilice, siempre y cuando no sea MSTest
Mike Mooney
21

Considere complementar, no reemplazar, MSTest con otro marco de prueba. Puede mantener la integración de Visual Studio MSTest mientras obtiene los beneficios de un marco de prueba más completo.

Por ejemplo, uso xUnit con MSTest. Agregue una referencia al ensamblado xUnit.dll y simplemente haga algo como esto. Sorprendentemente, ¡simplemente funciona!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key

namespace TestSample
{
    [TestClass]
    public class XunitTestIntegrationSample
    {
        [TestMethod]
        public void TrueTest()
        {
            Assert.True(true);  // <-- this is the Xunit.Assert class
        }

        [TestMethod]
        public void FalseTest()
        {
            Assert.False(true);
        }
    }
}
Matt Crouch
fuente
Esta técnica también puede funcionar para NUnit, MBUnit u otros marcos de prueba mencionados en otras respuestas, pero no los he probado.
Matt Crouch
1
¿Crees que podría obtener pruebas parametrizadas para trabajar con MSTest con este enfoque, Matt?
DevDave
@DevDave No. En su ejemplo, acaba de usar una clase de otro ensamblado. Si desea realizar pruebas parametrizadas, necesitaría otro marco de prueba específicamente diseñado para extender MSTest.
zoran404
3
Suprisingly, it just works!Acabas de llamar a una función estática desde otro ensamblado. ¿Por qué te sorprende que funcione? Además, si solo necesita afirmaciones de por qué no usar un ensamblaje específicamente hecho para eso.
zoran404
9

Nunit no funciona bien con proyectos de modo mixto en C ++, así que tuve que abandonarlo

Eric
fuente
3
No estoy orgulloso de esta respuesta, pero abandoné las pruebas unitarias para ese proyecto. Recurrí a escribir muchos procedimientos de validación para la detección de errores en tiempo de ejecución
Eric
2
Tenía la esperanza de usar NUnit en modo mixto, pero también me pareció inadecuado, al final elegí googletest, que es un excelente marco de prueba de unidad C ++ y muy sencillo de configurar.
chillitom
8

No es un gran problema a pequeña escala / personal, pero puede convertirse en un gran negocio rápidamente a mayor escala. Mi empleador es una gran tienda de Microsoft, pero no quiere / no puede comprar en Team System / TFS por varias razones. Actualmente utilizamos Subversion + Orcas + MBUnit + TestDriven.NET y funciona bien, pero obtener TD.NET fue una gran molestia. La sensibilidad de la versión de MBUnit + TestDriven.NET también es una gran molestia, y tener una cosa comercial adicional (TD.NET) para revisión legal y adquisición para manejar y administrar, no es trivial. Mi empresa, al igual que muchas empresas, está gorda y contenta con un modelo de suscripción a MSDN, y no está acostumbrado a gestionar adquisiciones únicas para cientos de desarrolladores. En otras palabras, la oferta de MS totalmente integrada, aunque definitivamente no siempre es lo mejor, es un valor agregado significativo en mi opinión.

Creo que seguiremos con nuestro paso actual porque funciona y ya hemos superado el problema organizativo, pero seguro que me gustaría que MS tuviera una oferta convincente en este espacio para que podamos consolidar y simplificar un poco nuestra pila de desarrolladores.

usuario8133
fuente
2
¡ReSharper tiene una oferta convincente en este espacio!
Ardilla
77
Su respuesta es curiosa y parece contradictoria. Dices que eres una gran tienda de Microsoft, pero que no usarás TFS (que es el punto principal, no obtendrás el beneficio de la integración vertical sin ella) y usarás un modelo de suscripción MSDN, pero estás usando un -Enfoque MS. Estoy perdido, para ser honesto. Bien desactualizado respuesta, por desgracia.
nicodemus13
6

No es gran cosa, es bastante fácil cambiar entre ellos. La integración de MSTest tampoco es un gran problema, solo tome testdriven.net.

Como dijo la persona anterior, elija un marco burlón, mi favorito en este momento es Moq.


fuente