1

単体テストしようとしているライブラリがあります。TraceSource を使用して警告の詳細を書き出します。単体テストをビルドの一部として実行するように設定しているので、テストの実行時 (特に失敗時) にそれらを表示したいと考えています。

トレース リスナーを登録するために次のコードを試しましたが、コンストラクターが呼び出されているにもかかわらず、WriteLine が呼び出されません。下部のコードを参照してください [1]。

トレースをテスト ランナーの一部として表示するにはどうすればよいですか?

[1] testcontexttracelistener のコード:

[TestClass]
public class TestContextTraceListener : TraceListener
{
    TestContext testContext;

    public TestContextTraceListener(TestContext testContext)
    {
        this.testContext = testContext;
    }

    public override void Write(string message)
    {
        // EP TODO: This is likely going to create newlines where they shouldn't be, but testContext doesn't have a .Write, and I'm too lazy to buffer.
        this.WriteLine(message); 
    }

    public override void WriteLine(string message)
    {
        this.testContext.WriteLine(message);
    }
}

[TestClass]
public class TestAssemblyInitializeAndCleanup
{
    static TraceListener traceListener;

    [AssemblyInitialize]
    public static void OnInitialize(TestContext testContext)
    {
        if (traceListener == null)
        {
            // This code is reached, but the listener never gets triggered.
            traceListener = new TestContextTraceListener(testContext);
            Trace.Listeners.Add(traceListener);
        }
    }

    [AssemblyCleanup]
    public static void OnCleanup()
    {
        Cleanup();
    }

    static void Cleanup()
    {
        if (traceListener != null)
        {
            traceListener.Flush();
            Trace.Listeners.Remove(traceListener);
            traceListener.Dispose();
        }
    }
}
4

0 に答える 0