2017-10-27 3 views
0

私のライブラリには、デバッグ出力をConsole.WriteLine()に出力するバックグラウンドスレッドがいくつかあります。最初のテストでは、テストの出力でバックグラウンドスレッドからデバッグ行を見ることができます。しかし、次のテストではこの出力はこれ以上表示されません。なぜNUnitはバックグラウンドスレッドからのコンソール出力を表示しませんか?

私は、テストメソッドselfでConsole.WriteLine()を呼び出すと、テスト出力に表示されます。私はデバッグを持っていることと、バックグラウンド試験の試験中にテストコール

  • 最初ます。Console.WriteLine()
  • その後、IST呼び出します。Console.WriteLine()
  • 最後のそれはでます。Console.WriteLine()を呼び出し再びテスト。

しかし、私はテストからの出力のみを直接参照し、バックグラウンドスレッドの出力は表示しません。

NUnitがスレッドコンテキストでキャプチャスコープを保存しているようです。

すべてのバックグラウンドスレッドからコンソール出力を取得するにはどうすればよいですか?

+0

おそらくNUnitで問題を開く必要がありますか?犯行はありませんが、他の誰かが答えを持っているかどうかわかりません。 – NightOwl888

+2

TestContext.WriteLine()は機能しますか? –

+0

@RobProuseライブラリにはNUnit APIへのアクセス権がありません。 – Horcrux7

答えて

2

私たちのライブラリには、我々はテストでのフォローを行うことができ、ログ出力をリダイレクトするためのオプションを持っているので:

[SetUp] 
    public void FixtureSetUp() 
    { 
     MyLibrary.Console = TestContext.Out; 
    } 

良い解決策はこれではありません。

0

これは、使用しているNUnitフレームワークの特定のランタイムビルドによって異なります。テキストキャプチャに関する情報は、NUnitのTestExecutionContextに保存されています。これは異なるビルドで別々に保存されます。

すべてのデスクトップビルド(.NET 2.0,3.5,4.0、および4.5)では、現在のTestExecutionContextCallContextに保持されます。 TestExecutionClassILogicalThreadAffinativeを実装しているため、新しいスレッドが作成されるときにコンテキストがテストに続きます。

2つの.NET標準ビルド(1.3と1.6)では、コンテキストはスレッドローカルストレージに保持されているため、新しいスレッドの作成には従いません。これは、.NET Standard 2.0ビルドがある場合に克服したいと考えている制限です。

関連する問題