À l'aide de ReSharper, comment faire pour afficher la sortie de débogage pendant une longue unité de test?
Je suis en utilisant xUnit avec le ReSharper test runner et la xUnitContrib resharper plugin.
Quand j'ai une longue épreuve de course à pied, j'aimerais être en mesure de produire un indicateur de progrès pour l'Unité de Test de la fenêtre de Sortie.
J'ai essayé Debug.WriteLines
, Trace.WriteLine
et Console.WriteLine
. Qui ont toutes le même comportement - rien n'indique dans la fenêtre de sortie jusqu'à ce que le test est terminé.
Par exemple:
[Fact]
public void Test()
{
Debug.WriteLine("A");
Trace.WriteLine("B");
Console.WriteLine("C");
Thread.Sleep(10000);
}
Le test ne montre pas de sortie jusqu'à ce que les 10 secondes se sont écoulées et le test est terminé. Comment puis-je obtenir une sortie le long du chemin?
Mise à JOUR de 1
J'ai essayé aussi avec MSTest et NUnit. NUnit est la seule qui montre la sortie le long du chemin.
MSTest et XUnit ne pas retourner tout de sortie jusqu'à ce que le test est terminé. Ce qui est curieux, c'est que tout le XUnit et NUnit test de sortie ressemble à ceci:
A
B
C
La MSTest de sortie ressemble à ceci:
C
Debug Trace:
A
B
Compte tenu de toutes ces variations, je pense que la réponse est que c'est le lanceur de test de la mise en œuvre de décider comment et quand à la sortie. Personne ne sait si il est possible de configurer le testeur XUnit?
Mise à JOUR 2
Je pense que ce doit être une carence en xUnitContrib. Posté à leur CodePlex issue tracker.
- Debug.WriteLine() fonctionne parfaitement bien pour moi quand je suis en mode debug. Donc, si vous voulez vous connecter de manière générale je recommande brenton réponse
- Non, il ne fonctionne pas avec xunit. Pas de sortie s'affiche jusqu'à ce que le test est terminé.
- Je vois, je n'ai pas joué avec XUnit seule NUnit. Et NUnit enregistrement ne travaillent le long de la debug fils...
- Oui, NUnit fonctionne bien pour cela. Voir ma mise à jour.
Vous devez vous connecter pour publier un commentaire.
Jetez un oeil ici pour un exemple de la façon d'effectuer l'enregistrement à l'aide xUnit.net v2:
http://xunit.github.io/docs/capturing-output.html
C'est l'exemple:
ITestOutputHelper
. Je comprends la question de la simultanéité rendant difficile à manipuler sortie à partir du code, je voulais juste faire remarquer pour les autres que cette solution a une limitation. Il serait agréable d'en tirer quelque chose comme trace d'auditeurs ou de détournement de flux de sortie par défaut pour lesDebug.Write*
méthodes.Par Brad Wilson:
http://xunitcontrib.codeplex.com/workitem/4160
ReSharper en quelque sorte retiré de l'écoute par défaut pour les tests unitaires. Pour afficher le texte dans la fenêtre de Sortie, il suffit d'ajouter cette ligne:
Pour NUnit cela fonctionne:
** La réponse tardive est parce que j'ai eu le même problème, et je viens de résoudre cela. peuvent aider les autres
XunitLogger utilise
AsyncLocal<T>
de garder une trace de l'enregistrement contexte, de sorte que les appels àTrace.Writeline
etConsole.Writeline
peuvent être acheminés à l'instance correcte deITestOutputHelper
.Utilisation:
Le plus simple que j'ai trouvé est d'utiliser log4net et de créer une console enregistreur. Sur le chemin, que vous êtes en cours d'exécution, vous souhaitez appeler logger.Info("infos"); ou un journal.Debug("infos"); - vraiment de ce que votre choix de niveau d'enregistrement et la sortie s'affichera dans Resharper Unité de Séances de Test.
Lire plus sur le log4net cadre sur l'Apache log4net page d'accueil. Le exemples de configuration sera également précieux.
Vous pouvez également envisager l'utilisation de
xunit.NLog
qui est une très belle et propre façon d'injecterITestOutputhelper
dans vos Cibles.http://www.tomdupont.net/2015/06/capture-xunit-test-output-with-nlog-and.html