web-dev-qa-db-fra.com

Avec ReSharper, comment afficher la sortie de débogage lors d’un test unitaire de longue durée?

J'utilise xUnit avec le programme d'exécution ReSharper et le plugin xUnitContrib resharper.

Lorsque j'ai un test de longue durée, j'aimerais pouvoir afficher un indicateur de progression dans la fenêtre de sortie du test unitaire.

J'ai essayé Debug.WriteLines, Trace.WriteLine et Console.WriteLine. Tous ont le même comportement - rien ne s'affiche dans la fenêtre de sortie tant que le test n'est pas terminé.

Par exemple:

[Fact]
public void Test()
{
    Debug.WriteLine("A");
    Trace.WriteLine("B");
    Console.WriteLine("C");

    Thread.Sleep(10000);
}

Le test ne montre aucune sortie jusqu'à ce que les 10 secondes se soient écoulées et que le test soit terminé. Comment puis-je obtenir une sortie en cours de route?

UPDATE 1

J'ai aussi essayé avec MSTest et NUnit. NUnit est le seul à afficher la sortie en cours de route.

MSTest et XUnit ne renvoient aucune sortie jusqu'à la fin du test. La partie étrange est que tandis que la sortie de test XUnit et NUnit ressemble à ceci:

A
B
C

La sortie de MSTest ressemble à ceci:

C


Debug Trace:

A
B

Compte tenu de toutes ces variations, je pense que la réponse est qu'il appartient à l'implémentation du programme d'exécution de test de décider comment et quand produire. Est-ce que quelqu'un sait s'il est possible de configurer le programme d'exécution de test XUnit?

UPDATE 2

Je pense que cela doit être une lacune dans xUnitContrib. Envoyé à leur CodePlex Issue Tracker .

26
Matt Johnson

Per Brad Wilson :

C'est une limitation dans xUnit.net, pas l'adaptateur Resharper.

Nous aborderons cela dans la v2 de xUnit.net.

http://xunitcontrib.codeplex.com/workitem/4160

6
Matt Johnson

Si vous avez utilisé xUnit.net 1.x, vous avez peut-être déjà écrit la sortie Sur Console, Debug ou Trace. Lorsque xUnit.net v2 était livré avec la parallélisation Activée par défaut, ce mécanisme de capture de sortie N'était plus approprié; Il est impossible de savoir lequel des nombreux tests pouvant être exécutés en parallèle était responsable de l'écriture de sur ces ressources partagées. Les utilisateurs qui transfèrent du code de v1.x à V2.x doivent utiliser l'une des deux nouvelles méthodes.

Jetez un coup d'œil ici pour voir par exemple comment enregistrer dans xUnit.net v2:

http://xunit.github.io/docs/capturing-output.html

Voici l'exemple:

using Xunit;
using Xunit.Abstractions;

public class MyTestClass
{
    private readonly ITestOutputHelper output;

    public MyTestClass(ITestOutputHelper output)
    {
        this.output = output;
    }

    [Fact]
    public void MyTest()
    {
        var temp = "my class!";
        output.WriteLine("This is output from {0}", temp);
    }
}
24

ReSharper a en quelque sorte supprimé le programme d'écoute par défaut dans les tests unitaires. Pour afficher du texte dans la fenêtre de sortie, ajoutez simplement cette ligne:

Debug.Listeners.Add(new DefaultTraceListener());
7
Thông Nguyễn

Le plus simple que j'ai trouvé est d'utiliser log4net et de créer un consignateur de la console. En cours de route, vous appelez logger.Info ("info here"); ou log.Debug ("info here"); - vraiment quel que soit votre niveau de journalisation préféré - et le résultat apparaîtra dans les sessions de test d'unité de resharper.

En savoir plus sur le framework log4net sur la page d'accueil Apache log4net . Le exemples de configuration sera également inestimable.

0
brenton

Pour NUnit, cela fonctionne:

Console.SetOut(TestContext.Progress);

** La réponse tardive est parce que j'ai eu le même problème et que je viens de le résoudre. peut aider les autres

0
Yitzchak