web-dev-qa-db-ja.com

xUnit Runnerがテストを見つけられないのはなぜですか

次のようなxUnit.netテストがあります。

static class MyTestClass
{
    [Fact]
    static void MyTestMethod() 
    {
    }
}

VS 2012のxUnitプラグインには次のように書かれています。

実行するテストが見つかりませんでした。

TestDriven.netはそれを正常に実行します ただし、アドホックについて何か言及しています

1合格、0失敗、0スキップ(「タスクリスト」を参照)、0.47秒かかりました(アドホック)

TeamCity、xunit.gui.exeおよびxunit.console.exeおよびVisual StudioもTestMethodを見つけることができません

(私が持っている xunit.runner.visualstudioがインストールされ、VSはいくつかのテストを見ています。

何が得られますか?

63
Ruben Bartelink

TL; DRテストクラスmust be public(ただし、テストメソッドはprivateおよび/またはstatic


効率上の理由から、xUnitの作成者は、ランナーでテストクラスを検索するときにBindingFlags.NonPublicを使用しないことを選択しました(MSILメタデータテーブルはprivate(/ internal)にインデックスを付けません)クラスは同程度であるため、Reflectionが達成できる相対的な効率には大きなパフォーマンスの違いがあります)。

上記の結果として、classprivateであるという事実は、ピックアップされないことを意味します。

テストメソッドがprivateおよびstaticであるという事実は問題ありません-1.0はこれらの両方の側面をサポートしているため、xUnitは設計上です。

Visual Studio xUnit Runner拡張機能、xunit.console.exe(およびGUI)、xunit MSBuildタスク、ResharperおよびCodeRushはすべて、これを尊重することに一貫性があることに注意してください(ただし、おそらく[特に後の2つ]テストクラス(つまり、[潜在的に間接的に] Fact派生アノテーションを含むクラス)がprivateである場合にフラグを立てる。

TestDriven.netがテストを実行する理由は、TestDriven.netの作成者がそれをJust Workにするために多大な努力を払ったからです。内部で特別なテストランナーラッパー/シム(アドホックランナーと呼ばれる)を使用してテストを実行します。メソッドは実際にはxUnit.netランナーを介して実行されていないため、テストに設定した副作用のある属性はトリガーされないことに注意してください。

特に、NUnit(およびMSTestと確信しています)doはプライベートリフレクションを使用します[したがって、privateクラスでテストを選択します]なぜあなたが以前心配することは決して重要ではなかったのでしょうか。

注:これによって可能になる副作用/トリックは、テストクラス[およびネストされたクラス]のすべてのテストをprivatepingする簡単な方法として、テストクラスSkipを作成できることです。 (残念ながら、この惑星で使用されているこのケースは、意図せずに意図的に使用されているケースをはるかに上回っています!)

95
Ruben Bartelink

この回答はVS 2013向けですが、手順はVS 2012向けと基本的に同じです。これは、 ReSharperの単体テスト機能 を介して実行する場合に適用されます。

  1. Visual Studio 2013のxUnit.netランナーをインストールします(Visual Studioを管理者として実行する場合は注意してください。または、IDEを非管理者として実行するとテストが実行されない場合があります):

    a。 Visual Studio 2013内から、[ツール]-> [拡張機能と更新プログラム]-> [オンライン]に移動します。

    b。 Visual Studio 2012および2013のxUnit.netランナーを検索

    c。次に、ダウンロード(インストール)します。 VS 2012からVS 2013にアップグレードする場合は、これをアンインストールしてから再インストールすることをお勧めします。

    d。 Visual Studioを再起動します。

  2. ReSharperがインストールされている場合、xUnit.netテストランナープラグインをインストールします。

    a。 Visual Studio 2013で、ナビゲート:Resharper-> Extension Manager。

    b。左側で[オンライン]を選択します。

    c。 「xunit.net」を検索します。 「xUnit.net Test Support」を選択します。インストールをクリックします。

    d。 Visual Studio 2013を再起動します。

  3. ソリューションを「きれいにする」

    a。 IDEのソリューションエクスプローラーで、ソリューションを右クリックし、[クリーン]を選択します。

    b。再コンパイルします。

    c。ここで、_[Fact]_属性を右クリックして、Resharperの[ユニットテストの実行]を選択します(デフォルトの[テストの実行]ではありません)

XUnitで実行中のトラブルシューティング:

  • XUnitを使用した[Fact]テストの実行に問題がある場合は、次のフォルダーのいずれかまたはすべてからxUnitパッケージを手動で削除する必要がある場合があります(xunit DLLのコンテンツを確認し、見つかった場合はxUnitフォルダーを削除します):

    • C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\

    • _C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\_

  • ReSharperに関しては、xunitcontribライブラリ(xUnit.netテストサポート)のアンインストールと再インストールを試してください。アンインストール時に、いくつかのエラーメッセージが過去に点滅することに気づきました。私はある時点でスクリーンショットをつかみました、そしてそれはリストしました:

    • パス_C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\ReSharper\v8.1\plugins\xunit.dll_へのアクセスは拒否されます。
    • ...そしてそのディレクトリ内の他のDLLについても同じ

    これを解決するには、Visual Studioからアンインストールした後に_C:\Users\<username>\AppData\Local\JetBrains\ReSharper\vAny\packages\xunitcontrib.1.3.0\_ディレクトリを削除し、非管理者としてVisual Studioを実行し、ReSharper(Resharper-> Extension Manager)で再インストールします。

43
CJBS

http://xunit.github.io/docs/getting-started-desktop.html#run-tests-visualstudio から:

テストの検出または実行に問題がある場合は、Visual Studio内の破損したランナーキャッシュの犠牲者である可能性があります。このキャッシュをクリアするには、Visual Studioのすべてのインスタンスをシャットダウンしてから、フォルダー%TEMP%\ VisualStudioTestExplorerExtensionsを削除します。また、プロジェクトがVisual StudioランナーNuGetパッケージ(xunit.runner.visualstudio)の単一バージョンに対してのみリンクされていることを確認してください。

18
Dan Friedman

VS2017 RC、.NET core 1.1プロジェクトでも同じ問題がありました。 xunit.runnerの更新はうまくいきましたが、

Install-Package xunit.runner.visualstudio
13
Dhanuka777

(他の回答のコメントで@Kyleが言及したとおり)同じNo tests found to runメッセージは、NuGetを使用してxUnit.dllを取得し、バージョン2.0.0(v1テストの発見などのコア機能がまだそのブランチに実装されていないため、現在プレリリースとしてマークされています)で終了します。

この場合の解決策は、NuGetパッケージマネージャーでStable Onlyバージョン(Include Prereleaseとは対照的に)を選択することです。

6
RichardU

私にとって、テストクラスとテストメソッド名の組み合わせが長すぎました。 xUnitは、この組み合わせに何らかの上限があるようです。

justの名前を短くすると、テストメソッドにより、xUnitはその単一のテストを検出できました。 class全体の名前を短くすると、xUnitはクラス内のすべてのテストを検出できました。

クラス名+メソッド名のしきい値は172文字のようです。

4
StoriKnow

私の場合、テストを表示するには、次の手順を完了する必要がありました。

(すべてNuGet Package Managerを介してインストールされます)

  1. xUnit v2.0.50727をインストールします
  2. インストールxUnit.extensions v2.0.50727
  3. 次のリンクに移動し、ドキュメントに記載されている手順に従います。 http://xunit.github.io/docs/running-tests-in-vs.html

Visual Studio 2013 Premiumを使用しています。 (Resharperはインストールされていません)

3
Adrian Reid

テストクラスまたはテストメソッドが発見されていないところで、私はしばらくの間.NET Coreでこの問題を抱えていました。次の修正プログラムは私のために動作します:

  1. コマンドプロンプトウィンドウを開きます。
  2. プロジェクトディレクトリに移動します。
  3. 次のコマンドを実行してプロジェクトをビルドします。

    dotnet build
    

注:Visual Studio.NETからのビルドは機能しません! <<<<<<<<<<< 重要!

  1. テストを実行します:テスト->実行->すべてをテスト-CTRL + R + A(これにより、新しいテストが検出されますが、新しいテストは実行されません).
  2. テストを再度実行します。
3
mkaj