2008-11-04 38 views
337

Existen bastantes frameworks de pruebas unitarias para .NET. Encontré esta pequeña comparación de características: http://xunit.github.io/docs/comparisons.htmlNUnit frente a MbUnit frente a MSTest frente a xUnit.net

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

+10

Esa tabla de comparación lleva años obsoleta. Por ejemplo, NUnit también tiene Assert.Throws, etc., y todo en la tabla Assertions es la antigua API. La nueva sintaxis fluida de Assert.That (..., Is ....) es mucho más agradable, y ha existido por un buen tiempo. –

+11

¿Conoces alguna tabla que esté más actualizada? – bitbonk

+1

Finales de 2013, trasladado 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

Respuesta

172

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

xUnit.NET también es EXTREMADAMENTE extensible.Sus clases de atributos FactAttribute y TraitAttribute no están selladas, y proporcionan métodos básicos invalidables que le dan mucho control sobre cómo deben ejecutarse los métodos que decoran esos atributos. Mientras que xUnit.NET en su forma predeterminada le permite escribir clases de prueba que son similares a los dispositivos de prueba NUnit con sus métodos de prueba, no se limita a esta forma de prueba unitaria. Puede ampliar el marco para que admita las especificaciones de Concern/Context/Observation al estilo BDD, como se muestra en here.

xUnit.NET también es compatible con pruebas de estilo de ajuste directamente fuera de la caja con su atributo de Teoría y atributos de datos correspondientes. Los datos de entrada ajustados pueden cargarse desde Excel, base de datos o incluso una fuente de datos personalizada, como un documento de Word (extendiendo el atributo de datos base). Esto le permite capitalizar en una única plataforma de prueba para pruebas unitarias y pruebas de integración, que puede ser enorme para reducir las dependencias de productos y la capacitación requerida.

Otros enfoques para las pruebas también se pueden implementar con xUnit.NET ... las posibilidades son bastante ilimitadas. En combinación con otro marco de burla muy avanzado, Moq, los dos crean una plataforma muy flexible, extensible y potente para implementar pruebas automatizadas.

+32

Si bien esto fue cierto hace un año o más, NUnit ha agregado la mayoría de los atributos en cuestión. En NUnit puedes escribir pruebas de cualquier manera. –

+7

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 principal para obtener las capacidades más recientes. – jrista

+9

1. Los diferentes nombres en los atributos no servirán de mucho. 2. NUnit era extensible y sigue siendo extensible:? 3. los parámetros de fila de datos para las pruebas son compatibles en nunit. Hace un tiempo fueron compatibles en una extensión :) 4. Nunit combinado con Moq crea la misma cosa. 5. Para BDD diría specflow, que se integra fácilmente con muchos frameworks de pruebas unitarias. – graffic

122

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 demasiado los marcos de pruebas unitarias, las bibliotecas de burlas son en mi humilde opinión mucho más importantes (y te encierro en mucho más). Solo elija uno y quédese con él.

+3

¿Cuál es su mejor selección de biblioteca de simulacro? – dplante

+28

Me gusta Moq, RhinoMocks también es bueno. –

+5

También podría valer la pena revisar Pex y Moles, la parte de los moles es especialmente útil para burlarse. –

6

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

Al igual que la persona anterior dijo elegir un marco de burla, mi favorito en este momento es Moq.

100

No me gustaría ir 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 test-runner de visual studio 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 versiones de Visual Studio, hay menos actualizaciones y, si tiene que trabajar con un VS más antiguo, está vinculado a un MSTest anterior.

No creo que importe mucho cuál de los otros marcos utiliza. 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.

+32

Me han arrastrado pateando y gritando a la 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 manera de que esté instalando Visual Studio en él solo para obtenerlo. Es una pena que Microsoft produzca excelentes herramientas y las haga casi inalcanzables. –

+10

+1 para llamar al horror que es MSTest. Al final del día, no importa qué marco de pruebas de unidades utilice, siempre y cuando no sea MSTest –

7

No es un gran problema en una escala pequeña/personal, pero puede convertirse en una oferta mayor rápidamente en una escala mayor. Mi empleador es una gran tienda de Microsoft, pero no puedo comprarlo en Team System/TFS por varias razones. Actualmente usamos 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 revisar y gestionar legalmente, no es trivial. Mi compañía, como muchas compañías, están gordas y felices con un modelo de suscripción de MSDN, y simplemente no está acostumbrado a manejar adquisiciones únicas para cientos de desarrolladores. En otras palabras, la oferta de MS completamente integrada, aunque definitivamente no siempre es lo mejor de pan, es un valor agregado significativo en mi opinión.

Creo que nos quedaremos con nuestro paso actual porque funciona y ya hemos superado la barrera organizacional, pero estoy seguro de que desearía que MS tuviera una oferta atractiva en este espacio para poder consolidar y simplificar nuestra pila de desarrollo un poco.

+2

¡ReSharper tiene una oferta atractiva en este espacio! – Squirrel

+6

Su respuesta es curiosa, y parece autocontradictoria. Usted dice que es una gran tienda de Microsoft, pero que no usará TFS (que es el punto principal, no obtendrá el beneficio de la integración vertical sin él) y usará un modelo de suscripción de MSDN, pero está usando un no Enfoque -MS. Estoy perdido, para ser honesto. Una respuesta desactualizada, desafortunadamente. – nicodemus13

5

no funciona bien con Nunit proyectos de modo mixto en C++ por lo que tuvo que soltarlo

+0

¿Qué terminaste eligiendo? –

+1

No estoy orgulloso de esta respuesta pero dejé 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

+1

. Tenía la esperanza de usar NUnit en modo mixto pero también me pareció inadecuado, al final fui para Googletest, que es un excelente marco de prueba de unidades de C++ yv simple para configurar – chillitom

18

considere complementar, no reemplazar, MSTest con otro marco de pruebas. Puede mantener la integración de Visual Studio MSTest y obtener los beneficios de un marco de prueba más completo.

Por ejemplo, uso xUnit con MSTest. Agregue una referencia al ensamblado xUnit.dll y solo 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); 
     } 
    } 
} 
+0

Esta técnica también puede funcionar para NUnit, MBUnit u otros marcos de prueba mencionados en otras respuestas, pero no los he probado. –

+1

¿crees que podría obtener pruebas parametrizadas para trabajar con MSTest con este enfoque, Matt? – DevDave