37

ReSharper テスト ランナーとxUnitContrib resharperプラグインで xUnit を使用しています。

長時間実行するテストがある場合、進行状況インジケーターを単体テスト出力ウィンドウに出力できるようにしたいと考えています。

とを試しましDebug.WriteLinesた。テストが完了するまで、出力ウィンドウには何も表示されません。 Trace.WriteLineConsole.WriteLine

例えば:

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

    Thread.Sleep(10000);
}

テストは、10 秒が経過してテストが完了するまで出力を表示しません。途中で出力を取得するにはどうすればよいですか?

更新 1

MSTestとNUnitでも試しました。NUnit は途中で出力を表示する唯一のものです。

MSTest と XUnit は、テストが完了するまで出力を返しません。奇妙な点は、XUnit と NUnit のテスト出力が次のようになっていることです。

A
B
C

MSTest の出力は次のようになります。

C


Debug Trace:

A
B

これらすべてのバリエーションを考えると、答えは、出力する方法とタイミングを決定するのはテストランナーの実装次第だということだと思います。XUnit テスト ランナーを構成できるかどうかは誰にもわかりませんか?

更新 2

これは xUnitContrib の欠陥に違いないと思います。CodePlex issue trackerに投稿されました。

4

8 に答える 8

33

xUnit.net 1.x を使用した場合は、以前にコンソール、デバッグ、またはトレースに出力を書き込んでいた可能性があります。デフォルトで並列化がオンになっている xUnit.net v2 が出荷されたとき、この出力キャプチャ メカニズムはもはや適切ではありませんでした。並行して実行されている可能性のある多くのテストのどれが、それらの共有リソースへの書き込みを担当したかを知ることは不可能です。コードを v1.x から v2.x に移植するユーザーは、代わりに 2 つの新しい方法のいずれかを使用する必要があります。

xUnit.net v2 でロギングを実行する方法の例については、こちらをご覧ください。

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

これは例です:

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);
    }
}
于 2015-07-08T12:15:48.310 に答える
6

ReSharper は、何らかの形で単体テストのデフォルト リスナーを削除しました。出力ウィンドウにテキストを表示するには、次の行を追加します。

Debug.Listeners.Add(new DefaultTraceListener());
于 2014-11-13T09:46:04.633 に答える
1

あなたが質問してから8年経った今、私はNUnitで同じ問題を抱えていました。:-(

以前は手動で行わなければならなかったことを覚えていないので、これはある時点で Resharper からデフォルトで実装されたと確信しています。しかし、いつの間にか、機能しなくなりました。

(NUnit の) 解決策は、NUnit 単体テストの先頭にこの行を追加することです。

Console.SetOut(TestContext.Progress)

これにより、単体テストの実行中に、すべての (既存の) Console.Out.WriteLine("") 出力が Resharper 単体テスト ランナーの出力セクションに直接出力されます。

于 2021-02-04T22:42:58.423 に答える
0

私が見つけた最も簡単な方法は、log4net を利用してコンソール ロガーを作成することです。途中で、実行中に logger.Info("info here"); を呼び出します。または log.Debug("info here"); -実際に好みのログレベルが何であれ、出力はResharper Unit Test Sessionsに表示されます。

Apache log4net ホームページでlog4net フレームワークの詳細を参照してください。設定例も貴重です。

于 2013-02-26T15:19:52.670 に答える