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) ==========
また、次のように、選択したテスト調整情報の下に「出力」リンクはありません。 (「テストに合格しました...経過時間...」のみ)
このITestOutputHelper
を機能させるにはどうすればよいですか?
この解決策を試してください。それは私のために働きます(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
お役に立てば幸いです。動作するかどうか教えてください。ありがとう。
また、NUnitを長い間使用した後、初めてXUnitを使用したときもこれに遭遇しました。驚いたことに、XUnitはコンソール出力を直接サポートしていませんが、同じことを実現する他の方法をいくつか提供しています。
https://xunit.github.io/docs/capturing-output.html
XUnitに本当に投資していない場合は、NunitまたはMsTestを使用するのが最も簡単な方法です。どちらもシンプルなconsole.writeline
をサポートしているためです。
ITestOutputHelper実装の場合のみ、以下が機能します。
@joeによって報告されているように、ユニットテストプロジェクトのApp.configに{add key = "xunit.diagnosticMessages" value = "true"}を配置する必要があります。
@stefanoによって報告されているように、タイプITestOutputHelperのローカルメンバーをテストクラスに追加する必要があります。そして、それをコンストラクターのパラメーターに追加し、注入されたオブジェクトをローカルメンバーに割り当てる必要があります。
出力メソッドでインストルメントした後、再構築する必要があります。
失敗するテストが必要です。
出力メソッドの呼び出しは、失敗したテストに先行する必要があります。
これは、PER TESTで機能します。テストスイート用ではありません。