Pregunta

Estamos trabajando en un proyecto aquí en Visual Studio 2008. Estamos usando el conjunto de pruebas incorporado que se incluye con este (el espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting). Resulta que, para nuestro disgusto, una gran cantidad de complejidad (y, por lo tanto, errores) han terminado codificados en nuestra capa de interfaz de usuario. Si bien nuestras pruebas de unidad hacen un trabajo decente al cubrir nuestra capa de negocios, nuestra capa de UI es una fuente constante de irritación. También nos gustaría idealmente hacer una prueba unitaria de eso. ¿Alguien sabe de un buen " compatible con Microsoft " ¿Cómo hacerlo en el estudio visual? ¿Se introducirá algún tipo de conflicto para "mezclar" los marcos de prueba de unidades como nUnitForms con las cosas de Microsoft? ¿Hay alguna trampa obvia que deba tener en cuenta con los formularios de prueba unitaria?

¿Fue útil?

Solución

Necesitaría refactorizar la IU para que la IU no necesite ninguna prueba de unidad. La UI debe contener una lógica de negocios mínima o nula Hay muchos patrones que tratan este problema. Martin Fowler tiene un muy buen artículo que explica mucho sobre estos patrones: http://martinfowler.com/eaaDev/ uiArchs.html

Hay un pequeño capítulo en el libro de Refactorización de Martin Fowler que habla sobre la refactorización de la IU no verificable. También puede leer Trabajar efectivamente con el código heredado.

Nota: hay una herramienta que podría usarse para automatizar las pruebas de la interfaz de usuario. SilkTest viene a mi mente. Pero no los usaría si es posible.

Otros consejos

Todo esto está muy bien para las pruebas unitarias de la aplicación regular ... pero si está creando controles de usuario que necesitan pruebas unitarias para los estados y comportamientos de control, también se necesita un marco de pruebas unitarias. NUnitForms podría ser la respuesta para usted; personalmente, debo comprobarlo yo mismo.

Utilizo la arquitectura de vista pasiva tal como se detalla aquí http://martinfowler.com/eaaDev/PassiveScreen. html

Básicamente mueva todo su código en los formularios a una clase separada llamada xxxUI. El formulario implementa una interfaz IxxxUI y expone todo lo que necesita la clase xxxUI. Probablemente pueda simplificar las cosas y agregar el manejo de varios controles en un solo método.

Luego, el flujo va. El USUARIO hace clic en un botón. El botón llama a un método en la clase de IU correspondiente. Pasando los parámetros necesarios. El método UI Class modifica el modelo. Luego, utilizando la interfaz se actualiza la interfaz de usuario.

Para las pruebas unitarias, tiene clases de prueba o ficticias que implementan las interfaces y se registran automáticamente con las Clases de UI. Puede hacer que estas clases de prueba activen cualquier tipo de entrada y respondan en consecuencia. Normalmente tengo listas de secuencias que hacen las cosas en un orden preciso. (Toque A, haga clic en esto, desplace eso, luego escriba B, etc.).

Es bastante fácil probar Winforms con ApprovalTests (www.approvaltests.com o pruebas de aprobación de nuget) y son compatibles con MsTest y Nunit.

Aquí hay un video de cómo hacerlo: https://www.youtube.com/ ver? v = hKeKBjoSfJ8

Pero el proceso es simple. 1) cree el formulario que desea probar en el estado en el que desea que se verifique. 2) llamar a WinFormApprovals.Verify (formulario)

ApprovalTests utiliza el paradigma del maestro dorado para capturar el resultado. si lo desea, simplemente cambie el nombre del archivo a .aprobado y la prueba pasará.

Lo mejor de esto para refactorizar el código existente es que ni siquiera tiene que preocuparse por el resultado, ya que solo le preocupa que no lo esté cambiando.

Echa un vistazo al WIP de Jeremy D. Miller página de wiki de Patrones de presentación para inspiración de refactorización: )

Miller está escribiendo un libro, y parece que va a ser una herramienta imprescindible para este tipo de cosas.

¡He usado NUnitForms cuando se trata de probar mis propios controles de UI con buenos resultados! Estaría de acuerdo con los demás en la refactorización si está utilizando controles de IU estándar (o bien probados).

Si el objetivo es probar los controles reales, usaría NUnitForms, ya que puede extenderse para admitir sus nuevos controles. De todos modos, si no va a involucrar ninguna prueba manual, necesitará una lib que puede hacer " basada en imágenes " Análisis del resultado final mostrado.

Probé TestComplete para esto, pero me pareció un poco caro ya que podía codificar una biblioteca similar solo para la comparación de imágenes en c #. Por lo tanto, mi plan sería probar los controles por separado y luego refactorizar la interfaz de usuario como mencioné y los otros.

Debería usar la IU codificada de Microsoft para probar la capa de IU. Esto implica escribir (o grabar) pruebas que imitan acciones que un usuario realizaría y escribir declaraciones de afirmación para garantizar que se logre el resultado correcto.

Por supuesto, esto es discutible, no una prueba de unidad, porque es difícil crear acciones desde el extremo delantero que prueban una sola unidad de trabajo y no es un reemplazo para otras pruebas de unidad. También estoy de acuerdo en que la lógica de negocios de front-end debe ser lo más delgada posible. Sin embargo, esto llenará cualquier hueco donde sus pruebas de unidad no cubran. Es de esperar que solo las pequeñas unidades de trabajo no queden cubiertas por las pruebas de unidad, de modo que las pruebas de IU codificadas detecten las unidades no probadas restantes.

La IU codificada viene incorporada con las últimas versiones de Visual Studio Premium. Le sugiero que no solo use la funcionalidad de grabación, sino que aprenda cómo escribir las pruebas usted mismo, ya que esto le brinda mayor flexibilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top