OK, votre application sons grand! Je peux partager mes expériences autour d'une application, nous avons conçu récemment; il a une interface graphique parler des services web à un serveur qui à son tour contacté plusieurs bases de données et d'autres services web. Le client de base est d'environ 15 000 utilisateurs... de toute façon - c'est beaucoup de travail, peu importe la façon dont vous vous approchez d'elle; l'avantage est qu'il vous aidera à ne pas mâcher vos ongles à chaque fois que vous effectuez une mise à jour!
MVVM
En général, je recommande aussi la pattern MVVM et faire autant de tests que possible, sans interface graphique. GUI test est acharné! J'aime Josh Smith article sur MSDN: "des Applications WPF Avec Le Modèle model-View-ViewModel Modèle de Conception" (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx)
Test De Script
Le truc avec cette application a été que nous avons eu beaucoup de test, les tripes sont constamment en mouvement et il y avait (étrangement) pas assez de gens pour obtenir les tests travail effectué pour chaque itération.
Ma solution a été à venir avec un outil de test qui a mobilisé les bibliothèques existantes. Nous avons eu un simple moteur de script que de lire un fichier et exécuté les commandes. En effet, nous avons développé un DSL (http://en.wikipedia.org/wiki/Domain-specific_language) pour tester notre application spécifique. Le DSL inclus quelques commandes simples pour signaler que "fenêtre", c'était des essais, des "setup" signaux et puis une série de commandes, suivi par des assertions. Ça ressemblait à quelque chose comme ceci:
Test NewXyzItem
Le Programme D'Installation Clear_items
Appuyez Sur Some_button
Enter_text_into Nom De Bobby Joe
(...)
Appuyez Sur Enregistrer
Assert_db_has_itemX SomeKey
Le format de chaque ligne est
"command" "argument" [data]
Les scripts d'aller dans des groupes de répertoires et le "testeur" de charges, les analyse et les exécute. La création de journaux et de rapports comme vous allez le est utile, je l'ai ajouté au crochet pour faire des captures d'écran, etc, qui est venu dans maniable. Si vous êtes intéressé à mettre en place quelque chose de likke, et d'une main, laissez-moi savoir.
La chose à portée de main, c'est que nous pourrions faire de couverture des modifications à la stratégie de test.
L'écriture de scripts devient assez simple qui est important parce que vous vous retrouvez avec beaucoup, beaucoup de scripts. Les contrôles sont découverts par nom si vous suivez une convention (par exemple, "Nom" peut être "NameTextBox" dans le code, ou sur "Enregistrer" pourrait être "SaveButton").
Vous pouvez réellement harnais NUnit etc à votre test runner trop.
REMARQUE - il suffit d'exécuter les tests de manière interactive, l'obtention de GUI test fonctionne avec CI est difficile et problématique...
Données et Tests
Une chose importante ici est que la gestion des données a été une énorme partie de l'épreuve problème et ne peut pas être négligé. Notre "frais de déploiement" a également été très long, mais certaines parties ont été externe et nous n'avons eu aucun contrôle sur la fraîcheur des données. La façon dont nous avons géré le service de nettoyage était de fournir des crochets à travers le script qui nous a permis de retirer facilement les objets avant de les tests. Pas optimal, mais il est rarement un problème.
Les bibliothèques
La bibliothèque que vous pouvez trouver le plus utile dans les "Blancs" (http://white.codeplex.com/) Il peut tester les applications windows en général – je.e WPF et WinForms. Essentiellement, en fin de codage des choses comme ceci:
Button button = window.Get<Button>("SaveButton");
button.Click();
Si votre application fait les appels asynchrones, vous aurez besoin de venir avec une stratégie pour le lanceur de test afin de savoir quand l'appel asynchrone est terminée, peut-être bien que la barre d'état ou de quelque chose. Ça dépend comment vous crochet dans...
Encore une fois, beaucoup de travail, mais ça en vaut la peine.
PK :-)