J'ai une ressource incluse dans ma demande. Ceci
de app.xaml (à la manière de ce ainsi de réponse ): p>
< forte> app.xaml: strong> p> dans ce dictionnaire, j'ai plusieurs styles, y compris un style de page: P> MyDictionnaire .xaml: strong> p> Cette configuration fonctionne assez bien lorsque Visual Studio voit la page en mode de conception et lors de l'exécution du projet. P> J'utilise Outils de test d'unité intégrés de Visual Studio . Lorsque j'essaie de faire des tests d'unité pour la classe MyPage (qui utilise myPage.xaml lorsque le constructeur incendie) mes tests échouent. Mypage.xaml utilise les styles définis dans le dictionnaire inclus dans l'application.Resources. Les tests ne reconnaissent pas le pagestyle, car l'application.Resources n'a pas été incluse lorsque le test de l'unité a commencé et, par conséquent, la page ne parvient pas à instancier. Comment incluez-moi mon application.Resources dans mes tests d'unité? Alternativement, y a-t-il un meilleur moyen d'exécuter des tests d'unité pour les pages WPF et Windows? P> p>
3 Réponses :
Basé sur votre commentaire, je vous suggère d'utiliser Model-View-ViewModel (MVVM) ou tout autre système Tirer le plus de logique possible hors de vos composants au niveau de l'interface graphique et tester cette logique là-bas. Cela ne résout pas directement votre problème actuel, mais le fait est que la logique de l'interface graphique est notoirement difficile à tester - si difficile de ne pas en valoir la peine, à mon avis, avec MS Test et d'autres coureurs de test de l'unité. p>
Test de l'unité L'interface graphique est un monde de douleur (j'ai essayé). Il y a généralement de meilleurs outils pour cela. P>
Très bien, on dirait que la réponse est "Ne mettez pas autant de fois le code dans le code - derrière que les tests d'unités sont nécessaires". Je vais déplacer mon code en excès sur les fichiers XAML.CS et tester ces pièces séparées, se rapprochant des normes MVVM.
J'ai élaboré un code qui fonctionne et charge effectivement le véritable élément qui manquait pour moi, bien que l'approche HTTPS: / /Stackoverflow.com/a/748440/57883 est probablement mieux pour isoler les erreurs de test et constituer la bibliothèque de tests.
var targetAssembly = typeof(PracticeManagement.MainWindow).Assembly; var currentAssembly = this.GetType().Assembly; Application.ResourceAssembly = targetAssembly; var rd = (ResourceDictionary)Application.LoadComponent(new Uri("/ProjectName;component/CommonUIStylesDictionary.xaml", UriKind.Relative)); if (Application.Current == null) { var x = new System.Windows.Application(); // magically is assigned to application.current behind the scenes it seems } Application.Current.Resources = rd; var mainWindow = new ProjectName.MainWindow(this.Connection.ConnectionString); mainWindow.Show();
CurrentAssemblage Code> sur la deuxième ligne ne semble pas être utilisé
Il semble que la création d'une instance de la classe d'application et d'appeler initializececomponent fait le tour.
Pourquoi le balisage va-t-il faire partie de vos tests d'unité?
J'utilise ma méthode actuelle principalement parce que c'est la seule façon de tester les constructeurs que j'ai faits pour cette classe (qui hérite de la page). Je suis ouvert à d'autres options.
Cette question fournit en fait une solution à ce problème.