ただし、これらのテストのうち400件は(順番に)実行できますが、特定のテストではxUnitランナーがハングアップするか、完全にダウンすることがわかりました。
私はしませんケア特定のテストがLinuxで実行できない場合、特定のテストはDTCと、サポートする必要のない管理されていないガンフに関連しています。
しかし、私が欲しいのは、それらのテストに無視を適用し、テストが無視されたという事実をビルド出力で適切にフラグ付けすることです。
質問は、いくつかの可能な解決策になると思います。
元のコードをあまり変更しないようにすることができれば、コードは実際に変更するためのものではなく、クロスプラットフォームのハックをたくさん適用しても、おそらくあまりうまくいきません。
スキップテスト(つまり、可能であればconfig/commandファイル)を外部化することは避けます。これは、テストを簡単に実行して信頼できるものにすることには多少反対します。コードでテストを無視することは、他の人が関与し始めるときに最も安全なアプローチです。
私はいくつかのオプションを見ることができました。ここに、既存のコードの変更を含む2つがあります。
VS Solutionで、プリコンパイラフラグMONOWIN
を定義する別の構成を定義します(Monoで使用するためにWindowsでコンパイルされたコード用であることを明示的に示すフラグであるため)。
次に、Mono用にコンパイルされたときにテストを無視する属性を定義します。
_public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
public IgnoreOnMonoFactAttribute() {
Skip = "Ignored on Mono";
}
#endif
}
_
この方法には、元のソリューションをモックする必要があり、サポートする必要がある別の確認を追加するため、この方法の利点を見つけるのは実際には困難です。
個別の構成が必要ないことを除いて、option1と同様のソリューションを次に示します。
_public class IgnoreOnMonoFactAttribute : FactAttribute {
public IgnoreOnMonoFactAttribute() {
if(IsRunningOnMono()) {
Skip = "Ignored on Mono";
}
}
/// <summary>
/// Determine if runtime is Mono.
/// Taken from http://stackoverflow.com/questions/721161
/// </summary>
/// <returns>True if being executed in Mono, false otherwise.</returns>
public static bool IsRunningOnMono() {
return Type.GetType("Mono.Runtime") != null;
}
}
_
xUnitランナーは、_[Fact]
_および_[IgnoreOnMonoFact]
_でマークされている場合、メソッドを2回実行します。 (CodeRushはそれを行いません。この場合、xUnitが正しいと思います)。つまり、テストメソッドでは_[Fact]
_を_[IgnoreOnMonoFact]
_に置き換える必要があります。
CodeRushテストランナーは_[IgnoreOnMonoFact]
_テストを実行しましたが、[Fact(Skip="reason")]
テストを無視しました。私は、CodeRushがxUnitを反映していて、実際にxUnitライブラリを使用して実行していないことが原因だと思います。これはxUnitランナーで正常に動作します。
XUnit v2.0が利用可能になりました。スキップ可能なテストは、直接サポートされています。使用する:
[Fact (Skip = "specific reason")]
現在、新しいオプションがあります。
Nugetパッケージ SkippableFact を追加します。これにより、[SkippableFact]
の代わりに[Fact]
を使用でき、テスト内でSkip.<xyz>
を使用して、ランタイム中にテストを動的にスキップできます。
例:
[SkippableFact]
public void SomeTestForWindowsOnly()
{
Skip.IfNot(Environment.IsWindows);
// Test Windows only functionality.
}
これは1.8で解決されました-トレイトでフィルタリングできます。これを見てください issue log 。
更新:トレイトはコンソールランナーで機能しますが、MSBuildでは機能しません。このサポートの機能リクエストを追加しました。
これはトレイトの理想的な使用方法ですが、残念ながら、コマンドラインもxmlプロジェクトファイルもトレイトに基づくフィルタリングをサポートしていません。これについては、codeplexサイトに問題を追加する価値があります。