5

1 つの URI に設定する必要がある JSON テキスト ファイルでいっぱいのフォルダーがあります。現在、以下のように単一の xUnit "[Fact]" ですべて実行されています。

[Fact]
public void TestAllCases()
{
    PileOfTests pot = new PileOfTests();
    pot.RunAll();
}

次に、pot.RunAll() がフォルダーを解析し、JSON ファイル (たとえば 50 ファイル) を読み込みます。次に、それぞれが URI に対してハンマーで打たれ、それぞれが HTTP 200 (「ok」) を返すかどうかを確認します。失敗した場合は、現在、次を使用して失敗として出力しています

System.Console.WriteLine("\n >> FAILED ! << " + testname + "\n");

これにより、失敗が確実に目に留まりますが、xUnit はすべてのテストが失敗したと見なします (当然のことです)。最も重要なことは、xunit に「ここでは、この特定のテストのみを実行する」と指定できないことです。それは、現在構築されている方法ですべてか無かです。

プログラムでテスト ケースを追加するにはどうすればよいですか? *.json ファイルの数と名前を読み取ったら、それらを追加したいと思います。

4

1 に答える 1

3

簡単な答えは: いいえ、直接ではありません。しかし、少しハックではありますが、以下に示す回避策があります。

現状(xUnit 1.9.1時点)

クラスで を指定することにより、[RunWith(typeof(CustomRunner))]xUnit に CustomRunner クラス (実装する必要がある) をXunit.Sdk.ITestClassCommand使用して、この属性で装飾されたテスト クラスで使用可能なテストを列挙するように指示できます。

残念ながら、テスト メソッドの呼び出しは System.Reflection + 実際のメソッドから分離されていますが、実行するテストをテスト ランナーに渡す方法は分離されていません。

特定のテスト メソッドを呼び出すための xUnit フレームワーク コードのどこかに、 への呼び出しがありますtypeof(YourTestClass).GetMethod(testName)

つまり、テスト ディスカバリを実装するクラスが、テスト クラスの実際のメソッドを参照しないテスト名を返す場合、テストは xUnit GUI に表示されますが、テストを実行または呼び出しようとすると、TargetInvocationException.

回避策

考えてみれば、回避策自体は比較的簡単です。それの実用的な実装が見つかりhereます。

提示されたソリューションは、最初に xUnit GUI で異なるテストとして表示されるファイルの名前を読み取ります。次に、System.Reflection.Emitを使用して、入力ファイルごとに専用のテスト メソッドを含むテスト クラスを含むアセンブリを動的に生成します。

生成された各メソッドが行う唯一のことは、属性RunTest(string fileName)を指定したクラスでメソッドを呼び出すことです。[EnumerateFilesFixture(...)]詳細な説明については、リンクされた要旨を参照してください。

お役に立てれば; 必要に応じて、実装例を自由に使用してください。

于 2013-03-01T17:30:51.270 に答える