Comment diagnostiquer “TestFixtureSetUp a Échoué”
Nous utilisons TeamCity que notre serveur CI, et j'ai juste commencé à voir des "TestFixtureSetUp Failed"
dans l'échec du test de la fenêtre.
Aucune idée de comment je aller sur le débogage de ce problème? Les tests s'exécutent très bien sur mon poste de travail (R# test runner dans VS2008).
- La droite! Pourquoi ne pas NUnit afficher les détails de l'exception et de la stacktrace de TestFixtureSetUp, comme il le fait lorsqu'un test échoue?
- Nous devons signaler ce bug de NUnit
- Merci de voter pour le rapport de bug github.com/nunit/nunit-vs-adapter/issues/99
- La panique question Facile à répondre: parce que le VS Test de la Fenêtre affiche uniquement les méthodes d'essai. Le plus qu'on ne pourrait jamais faire serait de produire du texte de sortie, déjà encombré de la fenêtre de Sortie. Voir la question sur nunit pour la poursuite de la discussion.
Vous devez vous connecter pour publier un commentaire.
C'est un peu un défaut dans la mise en œuvre de TestFixtureSetUp (et TestFixtureTearDown) que les exceptions ne sont pas signalés. J'ai écrit la première mise en œuvre de leur et je n'ai jamais réussi à le faire fonctionner de la façon dont il était censé le faire. À l'époque, les concepts dans le NUnit code ont été étroitement associés à l'idée que des actions sont directement liées à un seul test. Donc, la déclaration de tout ce qui était lié à un résultat de test. Il n'y avait pas vraiment un espace pour signaler quelque chose qui s'est passé à la suite, sans un énorme ré-écrire (ce n'est pas un refactoring lorsque vous modifiez un mouton dans un escalator).
À cause de ce peu d'histoire il est difficile de savoir ce qui s'est vraiment passé dans un TestFixtureSetUp. Il n'y a pas un bon endroit pour attacher l'erreur. Le TestFixtureSetUp appel est un effet secondaire de l'exécution d'un test, au lieu d'être directement lié.
@TrueWill a la bonne idée. Vérifiez les journaux, puis modifier le test pour ajouter plus de l'enregistrement si nécessaire. Vous pourriez vouloir mettre à try/catch à l'intérieur de la TestFixtureSetup et journal beaucoup dans le bloc catch. J'ai juste pensé que je pourrais ajouter un peu de fond (en d'autres mots, c'est un peu de ma faute).
Je voudrais vérifier le Journal de génération en premier.
Si ce n'est pas évident de cela, vous pouvez essayer, y compris de la Console.WriteLines dans les tests - je ne suis pas positif, mais je pense que ceux qui sont écrits dans le Journal de génération. Alternativement, vous pourriez vous connecter à un fichier (même à l'aide de log4net si vous vouliez obtenir la fantaisie).
Si vous avez Visual Studio est installé sur le serveur CI, vous pouvez essayer de lancer le build/tests à partir de là. Si c'est un problème de connectivité, qui pourrait le résoudre.
J'ai vu des problèmes de chemin d'accès, cependant, lorsque les chemins d'accès relatifs aux fichiers n'étaient plus les corriger ou les chemins d'accès absolus ont été utilisés. Ces sont plus difficiles à déboguer, et peuvent nécessiter l'enregistrement de l'chemins et puis de vérifier si elles existent sur le serveur de build.
J'ai couru dans le présent aujourd'hui lors de la création de certains tests d'intégration qui ont des temps d'exécution du programme d'installation que je ne veux pas en double. J'ai fini l'habillage de tous les montage de test logique d'installation dans un try/catch. Je puis ajouter une méthode de Configuration dont le seul but est de voir si une erreur s'est produite lors de la configuration de la fixture et de fournir un meilleur enregistrement.
J'avais la même erreur lors de l'exécution d'un test avec SpecFlow à l'aide de Visual NUnit. Quand j'ai essayé de faire la même chose à partir de l'Explorateur de tests Unitaires(fourni par Resharper), il a donné un peu plus utile du message: méthodes de Reliure avec plus de 10 paramètres ne sont pas pris en charge. J'ai réalisé que je ne peut pas avoir un SpecFlow méthode avec plus de 10 params, a dû supprimer le test.
J'ai pu voir que je n'étais pas la création de ma base de données de test correctement en faisant un passage rapide à VS de Tests Unitaires. Dans mon Cas, il a été en mesure de retourner une meilleure réponse à la raison pour laquelle il a échoué. J'ai l'habitude d'utiliser NUnit.
"Impossible de créer une instance de la classe X. Erreur: System.Les données.SqlClient.SqlException: Un fichier d'activation erreur s'est produite. Le nom de fichier physique " \DbTest.mdf' est peut-être incorrect. Diagnostiquer et de corriger les autres erreurs, et recommencez l'opération.
CRÉER une BASE de données a échoué. Certains noms de fichier répertoriés n'a pas pu être créé. Vérifier les erreurs associées..
"
Exécuter le test de l'unité dans mode debug. Vous pouvez trouver une erreur d'exécution dans le programme d'installation.
Si vous utilisez SpecFlow et C# dans Visual Studio, regarder auto-généré
<whatever>.feature.cs
fichier après le test échoue. Sur lepublic partial class <whatever>Feature
ligne, vous devriez voir un symbole qui, lorsqu'il se penchait sur la volonté de montrer la raison pour laquelle la NUnit luminaire échec du programme d'installation. Dans mon cas, c'est que certains de mesBeforeFeature
méthodes dans monTestHooks
de classe n'étaient pas statiques. Tous lesBeforeTestRun
,AfterTestRun
,BeforeFeature
, etAfterFeature
les méthodes doivent être statique.J'ai eu ce problème et il a été causé par l'ajout d'un private readonly
Dictionary
dans la classe, de la même manière que vous ajoutez unprivate const string
.J'ai essayé de faire le
Dictionary
une constante, mais vous ne pouvez pas le faire au moment de la compilation. J'ai résolu ce problème en mettant monDictionary
dans une méthode qui retourne.J'ai eu ce symptôme causé par une erreur lors de l'initialisation. Si votre initialiser les champs de la
[SetUp]
méthode, vous devriez voir un meilleur message d'erreur.J'ai été troublé d'aujourd'hui. J'ai fait ce qui suit pour obtenir l'erreur réelle.
(1) Écrire un autre test dans un autre appareil qui initialise une instance de la troublante montage de test, appelle explicitement méthodes de configuration tels que TestFixtureSetUp et d'Installation le cas échéant, et exécute alors la cible de la méthode de test.
(2) Ajouter le code de gestion des exceptions pour le nouveau code ci-dessus, et log /sortie l'exception de quelque part.
Dans le cas où il peut aider quelqu'un:
Vous pouvez intercepter l'exception et de l'écrire dans la console sur le Démontage
Quelque chose comme :
Et le résultat sera :
TestFixtureSetUp échoué dans IntegratedTests.Services.BaseTest - Sur le but