OK, ¡su aplicación parece grande! Puedo compartir mis experiencias con una aplicación que diseñamos recientemente; era un GUI que hablaba de servicios web a un servidor que a su vez contactaba con múltiples bases de datos y otros servicios web.La base de clientes era de alrededor de 15,000 usuarios ... De cualquier manera, esto es mucho trabajo sin importar cómo se acerque; ¡Lo bueno es que te ayudará a no morderte las uñas cada vez que lo liberes!
MVVM
En general, yo también recomendaría el patrón MVVM y hacer tanto como sea posible sin pruebas de la interfaz gráfica de usuario. La prueba GUI es simplemente difícil Me gusta el artículo de Josh Smith en MSDN: "WPF Apps With The Model-View-ViewModel Design Pattern" (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)
Prueba de secuencias de comandos
El truco de esta aplicación es que teníamos mucho que probar, las tripas de que se mueve constantemente y había (curiosamente) no hay suficientes personas para realizar el trabajo de prueba para cada iteración.
Mi solución fue crear una herramienta de prueba personalizada que aprovechara las bibliotecas existentes. Teníamos un motor de script simple que leía un archivo y ejecutaba comandos. En efecto, desarrollamos un DSL (http://en.wikipedia.org/wiki/Domain-specific_language) para probar nuestra aplicación específica. El DSL incluía algunos comandos simples para indicar qué "ventana" estaba probando, cualquier señal de "configuración" específica y luego una serie de comandos seguidos por aserciones. Parecía algo como esto:
Test NewXyzItem
Setup Clear_items
Press Some_button
Enter_text_into Name Bobby Joe
(...)
Press Save
Assert_db_has_itemX SomeKey
El formato de cada línea es
"command" "argument" [data]
Los scripts van en grupos de directorios y las cargas "corredor de prueba" a ellos, los analiza y los ejecuta. La creación de registros e informes a medida que avanza es útil, me agregaron en el gancho para hacer capturas de pantalla, etc., que me resultó útil. Si está interesado en implementar algo como esto y desea una mano hágamelo saber.
Lo más práctico aquí es que podríamos hacer cambios globales a la estrategia de prueba.
Escribir los scripts se vuelve bastante simple, lo cual es importante porque terminas con muchos, muchos scripts. Los controles se descubren por su nombre, por lo que debe seguir una convención (por ejemplo, "Nombre" puede ser "NameTextBox" en el código, o "Guardar" podría ser "SaveButton").
En realidad, puede utilizar NUnit, etc. para ser su corredor de prueba también.
NOTA - Sólo ejecute las pruebas de forma interactiva, consiguiendo prueba de interfaz gráfica de usuario para trabajar con CI es difícil y problemático ...
datos y pruebas
Una cosa importante aquí es que la gestión de los datos fue una gran parte del problema de la prueba y no puede pasarse por alto. Nuestro "despliegue nuevo" también fue muy largo, pero algunas partes fueron externas y no teníamos control sobre la frescura de los datos. La forma en que manejamos la limpieza fue proporcionar ganchos a través de las secuencias de comandos que nos permitieron eliminar objetos fácilmente antes de las pruebas. No es óptimo, pero rara vez era un problema.
Bibliotecas
La biblioteca que puede resultar más útil en "White" (http://white.codeplex.com/) Se puede probar aplicaciones de Windows en general - es decir tanto en WPF y Windows Forms.Esencialmente se termina la codificación cosas como esta:
Button button = window.Get<Button>("SaveButton");
button.Click();
Si su aplicación hace asíncrono llama tendrá que subir con una estrategia para el corredor de prueba para saber cuando se termine la llamada asincrónica, tal vez, aunque la barra de estado o alguna cosa. Depende de cómo te enganches ...
De nuevo, mucho trabajo, pero vale la pena.
PK :-)
No dude en hacerme preguntas aclaratorias, pero no demasiadas por favor. –
Supongo que el back-end es un DB (o lo es). ¿También tienes problemas con las pruebas de datos? –
Back-end puede ser Oracle o MSFT SQL Server :) Los procedimientos almacenados y su código de invocación se genera a partir de "plantillas". Si bien es posible consultar la base de datos directamente, es preferible realizar pruebas de extremo a extremo. Sí, lo que sea que una prueba haga a un DB necesita ser imposible, pero se necesita menos de 1 hora para construir un DB nuevo desde cero. El resto de la limpieza se realizará preferiblemente a través de los clics de la GUI. Corrígeme si estoy equivocado. –