2009-10-08 16 views
9

PREGUNTA: Si estoy iniciando una aplicación de Windows Forms en C# usando Visual Studio 2008, ¿qué marco de prueba de unidades debo usar?¿Con qué marco de prueba unitaria debería comenzar con C# en Visual Studio 2008? (Aplicación Windows Forms)

Parece haber una versión en VS2008? ¿O debería buscar algo como NUnit? ¿O es NUnit lo que se usa en VS2008 debajo del capó? ¿Cuál es el más popular?

sería bueno tener algo que permite: (a) burlones/talones, y (b) la capacidad de hacer valer excepciones

gracias

Respuesta

5

Si solo es una aplicación simple, el marco MSTest integrado en VS2008 debe marcar todas las casillas. No es lo mismo que NUnit, aunque muchas personas (erróneamente) se refieren a él como si fueran la misma cosa.

Nunca lo he usado para burlarse, así que tal vez alguien más pueda dar más detalles al respecto. Genera un proyecto separado en su solución que solo tiene el propósito de probar. This is a good explanation of how to use it.

alt text

Editar: Haciendo un poco más de excavación, me encontré con this comparison de MSTest y NUnit.

Inconvenientes de marco NUnit:

  • Instalación de NUnit viene en una MSI separada.
  • Sin integración con Visual Studio.
  • Requiere escribir casos de prueba manualmente.
  • Sin generación automática de código.
  • Requiere abrir una ventana separada (NUnit Console o GUI) para ejecutar casos de prueba.
  • El pedido de la ejecución de casos de prueba no está disponible.
  • No característica incorporada para depurar casos de prueba.
  • No característica incorporada para habilitar/deshabilitar casos de prueba.
  • Sin Características incorporado para ofrecer información adicional de casos de prueba como el seguimiento de la pila, etc. Información de seguimiento
  • Sin Características incorporado para ordenar los casos de prueba basados ​​en el nombre del equipo, nombre de clase y tipo de host, etc.

Eso es del artículo de comparación al que me he vinculado.

Nunca he usado NUnit, solo MSTest para C# y JUnit para Java, por lo que soy un poco parcial al respecto. MSTest siempre me ha funcionado muy bien para WinForms, con funciones como la posibilidad de ejecutar las pruebas individualmente, mostrar informes realmente detallados (con registros de seguimiento individuales) y generar automáticamente todo el código de prueba y hacer todo ese tipo de cosas que hacen VS2008 un IDE tan brillante. Por lo que se dice, NUnit ha funcionado bien para otros y tienen sus razones por las que les gusta.

A menos que tenga un motivo en particular para tomar el enfoque NUnit/Testdriven.NET, como que necesita una determinada función, o simplemente prefiere esa manera de configurar las pruebas y tratar de integrarlo de nuevo en VS, entonces no lo hago No veo ninguna razón para no usar MSTest, que funciona de inmediato.

+1

Parece injusto cuando muchas personas usan TestDriven.NET para controlar NUnit. Eso proporciona una gran integración y elimina la mayoría de los inconvenientes que menciona. El atributo NUnit [Ignore] deshabilita los métodos [Test] o las clases [TestFixture]. Además, los casos de prueba de pedidos en mi humilde opinión es un poco mal :) – si618

+4

ouch. 600 caracteres no será suficiente. 1. eso es bueno. Puedo ejecutar mis pruebas en cualquier máquina (compilación/QA) sin tener que instalar VSTS. 2. Si desea hacer clic con el botón derecho y ejecutar las pruebas, obtenga los complementos Resharper/TestDriven.Net. También vea SO q # 196740. # 3,4,6,10 - no tiene sentido. Creo que los programadores conocen su código mejor que VS. Se deduce que pueden identificar mejor qué pruebas escribir. Pero luego estoy infectado con la prueba (lea fanático de TDD). los casos de prueba no deberían depender del pedido, por lo que no estoy seguro de por qué eso es una desventaja. – Gishu

+2

Contd ... Se pueden hacer pruebas de depuración (agregue nunit como exe externo para depurar para su dll de prueba); aunque eso implica que ya no conoces tu código. Clasificación de casos de prueba: nuevamente no estoy seguro de por qué lo necesita. Pero podría agrupar sus pruebas en categorías como [Categoría ("Pruebas lentas")] y luego incluirlas o excluirlas de las ejecuciones de prueba. También tiene una vista de casilla donde puede marcar manualmente las pruebas que le gustaría ejecutar. Finalmente 9. stacktrace - nunit hace eso en la primera pestaña. ¡Un marco de prueba de la unidad se lisiaría si no apuntara a la ubicación exacta donde falló la prueba! – Gishu

2

, diría que, por simplicidad, comenzar con el uno integrado en Visual Studio 2008. NUnit es fantástico y lo uso mucho, por lo que probablemente pueda pasar a NUnit una vez que esté cómodo con las pruebas de unidad de escritura.

+0

¿Las pruebas de unidad VS2008 le permiten afirmar que debe producirse una excepción? no puedo ver esto? – Greg

+2

Sí, aunque lo haces con un atributo ([ExpectedAssertion()] Creo) – Steve

8

Recomendaría usar NUnit para su marco de prueba. Es muy liviano y fácil de enviar si necesita configurarlo en un servidor de compilación. Este no es el caso usando MSTest. En cuanto a los marcos de burla/aislamiento, Rhino Mocks tiene la base de usuarios más grande y es probable que encuentre las respuestas a sus preguntas más rápidamente con Rhino Mocks.

+1

La mayor desventaja con MSTest es que una vez que comienzas por ese camino es difícil cambiar de opinión. NUnit es un poco más fácil de convertir a MSTest. SÍ intente con ambos. –

+2

NUnit también se ejecuta en Mono – joemoe

5

Hemos comenzado con MSTest. Tiene una ventaja que es (moderadamente) difícil de replicar en NUnit. Le permite acceder a miembros privados de la clase. Esto es invaluable cuando está comprobando el estado. Por ejemplo, di que tengo una función que coloca las entradas en un diccionario que no está expuesto. Según tengo entendido, con NUnit tiene que usar el reflejo para acceder al diccionario, o agregar un getter con el único propósito de probarlo. Aquí, puedes verificar el diccionario. Muy fácil y muy limpio. También le permite probar funciones privadas, lo cual me encanta (sé que algunas personas no creen en esto). Aunque no me gusta MSTest, esa característica hace que las pruebas sean mucho más fáciles.

La integración de VS también es agradable.

+0

¿Cómo logra MSTest el "acceso a miembros privados" Steve, ¿lo sabías? Sólo me interesó por qué sería fácil para los chicos de MSTest proporcionar esto, pero no a los chicos de NUnit. – Greg

+1

. Mi opinión es que los chicos de las nunidades no creen en eso. Con MSTest, simplemente haga clic con el botón derecho en la clase que desea probar y elija "Agregar acceso de clase". A continuación, accede a la clase Foo como Foo_Accessor en tu prueba. – Steve

+0

Mi grupo es relativamente nuevo en las pruebas unitarias, y había muchas cosas que nos gustaban sobre NUnit, pero el acceso privado fue un factor decisivo. – Steve

3

Utilice MSTest. Está integrado en VS2008 y tiene soporte en el IDE para crear funciones de prueba. Si y cuando "supere" MSTest, entonces debería mirar NUnit o el más moderno xUnit. Puede esperar excepciones en MSTest decorando con el atributo ExpectedException.

[Test] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Should_throw_ArgumentNullException_when_the_Order_is_null() 
{ 
    OrderProcessor processor = new OrderProcessor(); 
    processor.ProcessOrder(null); 
} 

Los marcos de burla son independientes de su elección del marco de prueba. Las opciones populares para el marco burlón son: Moq y Rhino Mocks.

+1

Esto se puede hacer con nUnit también. –

+1

Seguro. Y también puede ejecutar NUnit desde Visual Studio si tiene un reafilamiento. –

+0

MSTest no usa el atributo [Prueba]. Esto se usa en NUnit y MbUnit, que los hace intercambiables, también una ventaja por no usar MSTest, está más fuertemente vinculado a un marco. –

1

Usted no ha mencionado si se va a ser el código de prueba de conducción ..

  • Ir con NUnit si usted no está familiarizado con cualquiera de los marcos xUnit. La curva de aprendizaje más pequeña. Ha existido por más tiempo. Charlie Poole está activo en NUnit (código abierto) y tiene un buen historial de buenas actualizaciones.
  • VS2008 tiene integrado MSTest en su interior. No es lo mismo que NUnit. Nunca tuve motivos para cambiar de NUnit. Yo diría que NUnit definitivamente tiene la mayor base de usuarios.
  • NUnit tiene algo incluido para Mocks pero definitivamente te dirijo a Moq. Rhino Mocks ha sido el mejor perro desde hace un tiempo, pero Moq tiene una curva de aprendizaje más fácil (de documentos en línea) aunque no siempre maneje escenarios de borde ... todavía IMHO
  • La aceptación de excepciones es compatible con ambas.

Recomiendo conseguir un libro delgado 'Pragmatic Unit Testing in C# with NUnit' y hacerlo por lo menos una vez.

En la línea NUnit v MSTest, no estoy en condiciones de comentar. 0 tiempo de vuelo con MSTest.

  • Aunque escuché que VS2010 ofrecerá baratijas como informes automáticos de cobertura de código.solo si tiene las pruebas MSTest. Pero ese es el tipo de argumento que sigo escuchando a favor de MSTests ... más en las líneas de Soporte IDE e integración. Hay excelentes complementos como Resharper y TestDriven que pueden parchear eso pero a un precio.
  • Además, en mi humilde opinión, las herramientas de pruebas unitarias de Microsoft tienen una forma sutil de guiarlo por el camino oscuro. así que ten cuidado. Ver mi comentario a Dale en este hilo.
Cuestiones relacionadas