web-dev-qa-db-ja.com

xunitがメッセージを出力ペインに書き込まない

VS 2015コミュニティには、サンプルのASP.NET 5(vNext)プロジェクトと単体テスト(xUnit.net)を含むプロジェクトがあります。 DNXのバージョンは1.0.0-beta5です。私の目標は、テスト実行中にメッセージを出力ペインに追加することです。 ここ 私はこれを行う方法をとったので、私の単体テストコードは次のようになります。

using Xunit;
using Xunit.Abstractions;

namespace UnitTests
{

    public class UnitTest1
    {
        ITestOutputHelper output;

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

        [Fact]
        public void TestTestTest()
        {
            output.WriteLine("Test Message");
            Assert.Equal(2, 2);
        }

    }
}

Visual Studioテストエクスプローラーがこのテストを検出します(これで問題ありません)。ただし、(テストから)出力ペインにあるのは次のとおりです。

------ Run test started ------
------ Test started: Project: UnitTests ------
Starting  Microsoft.Framework.TestHost [C:\Users\*******\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta5\bin\dnx.exe --appbase "C:\Users\*******\Documents\Visual Studio 2015\Projects\MvcMovie\UnitTests" Microsoft.Framework.ApplicationHost --port 55837 Microsoft.Framework.TestHost --port 55893]
Connected to Microsoft.Framework.TestHost
Running tests in 'C:\Users\*******\Documents\Visual Studio 2015\Projects\MvcMovie\UnitTests\project.json'
========== Run test finished: 1 run (0:00:03,2267169) ==========

また、次のように、選択したテスト調整情報の下に「出力」リンクはありません。 enter image description here (「テストに合格しました...経過時間...」のみ)

このITestOutputHelperを機能させるにはどうすればよいですか?

26
Farfi

この解決策を試してください。それは私のために働きます(VS2017 xunit 2.2.0.3545)。

以下の構成をApp.Configファイルに追加してみてください。 (理由はわかりません。必要なだけです。存在しない場合は、テストプロジェクトに新しいものを追加してください。)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="xunit.diagnosticMessages" value="true"/>
  </appSettings>
</configuration>

出力情報は、以下のように期待どおりTest出力に書き込まれます。

[xUnit.net 00:00:00.0853907]   Starting:    xxxAssemblyName (parallel test collections = on, max threads = 8)
[xUnit.net 00:00:00.1689373]     Example.xxxTestClassName [PASS]
[xUnit.net 00:00:00.1697265]       Output:
[xUnit.net 00:00:00.1700698]         xxxx your Test Message
[xUnit.net 00:00:00.1797303]   Finished:    xxxAssemblyName 

お役に立てば幸いです。動作するかどうか教えてください。ありがとう。

6
Joe.wang

xunit github で説明したように、私は使用しました

private readonlyITestOutputHelper出力;

そして、これは私にはうまくいきました

3
stefano

また、NUnitを長い間使用した後、初めてXUnitを使用したときもこれに遭遇しました。驚いたことに、XUnitはコンソール出力を直接サポートしていませんが、同じことを実現する他の方法をいくつか提供しています。

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

XUnitに本当に投資していない場合は、NunitまたはMsTestを使用するのが最も簡単な方法です。どちらもシンプルなconsole.writelineをサポートしているためです。

2
on3al

ITestOutputHelper実装の場合のみ、以下が機能します。

@joeによって報告されているように、ユニットテストプロジェクトのApp.configに{add key = "xunit.diagnosticMessages" value = "true"}を配置する必要があります。

@stefanoによって報告されているように、タイプITestOutputHelperのローカルメンバーをテストクラスに追加する必要があります。そして、それをコンストラクターのパラメーターに追加し、注入されたオブジェクトをローカルメンバーに割り当てる必要があります。

出力メソッドでインストルメントした後、再構築する必要があります。

失敗するテストが必要です。

出力メソッドの呼び出しは、失敗したテストに先行する必要があります。

これは、PER TESTで機能します。テストスイート用ではありません。

0
Stato Machino