66

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

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

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

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

TestDriven.net は正常に動作しますが、 Ad hoc について何か言及しています:

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

TeamCity、xunit.gui.exeおよびxunit.console.exeVisual Studio も見つかりませんTestMethod

(私はxunit.runner.visualstudioインストール済みで、VS はいくつかのテストを見ています。)

何を与える?

4

8 に答える 8

101

TL;DR テスト クラスは である必要がありますpublic(ただし、テスト メソッドはprivateおよび/またはである可能性がありますstatic)


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

上記の結果、あなたclassがそうであるprivateということは、それが拾われないことを意味します。

テスト メソッドが優れているという事実private- static1.0 以降の設計による xUnit は、これらの両方の側面をサポートしています。

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

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

特に、NUnit (そして MSTest はかなり確信しています) はプライベート リフレクションを使用します [したがって、privateクラスでテストを取得します]。

注: これによって有効になる副作用/トリックは、テスト クラス [およびネストされたクラス] 内のすべてのテストに pingを実行privateする簡単な方法として、テスト クラスを作成できることです。Skip(悲しいことに、これが意図せずに使用されているこの惑星上のケースは、これが意図的に使用されているケースよりもはるかに多いのです!)

于 2013-04-25T12:24:28.310 に答える
43

この回答は 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 テスト ランナー プラグインをインストールします。

    (注: ReSharper 2016.1 以降、xunit サポートは ReSharper に組み込まれているため、xunit プラグインは不要になりました。)

    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 の [Run Unit Tests] を選択します (デフォルトの [Run Tests] ではなく)。

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 Test Support) をアンインストールして再インストールしてみてください。アンインストール時に、いくつかのエラーメッセージが点滅して過ぎたことに気付きました。ある時点でスクリーンショットを取得したところ、次のようにリストされていました。

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

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

于 2014-01-09T23:15:18.180 に答える
4

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

(すべて NuGet パッケージ マネージャーを介してインストールされます)

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

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

于 2015-03-10T09:41:50.923 に答える