TL;DR テスト クラスは である必要がありますpublic
(ただし、テスト メソッドはprivate
および/またはである可能性がありますstatic
)
効率の理由から、xUnit の作成者はBindingFlags.NonPublic
、ランナーでテスト クラスを検索するときに使用しないことを選択しました (MSIL メタデータ テーブルはクラスに同じ程度のインデックスprivate
(/ internal
) を付けないため、相対的な効率に大きなパフォーマンスの違いがあります。したがって、反射は達成できます)。
上記の結果、あなたclass
がそうであるprivate
ということは、それが拾われないことを意味します。
テスト メソッドが優れているという事実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 はかなり確信しています) はプライベート リフレクションを使用します [したがって、private
クラスでテストを取得します]。
注: これによって有効になる副作用/トリックは、テスト クラス [およびネストされたクラス] 内のすべてのテストに pingを実行private
する簡単な方法として、テスト クラスを作成できることです。Skip
(悲しいことに、これが意図せずに使用されているこの惑星上のケースは、これが意図的に使用されているケースよりもはるかに多いのです!)