スキップテスト(つまり、可能であればconfig / commandファイル)を外部化することは避けます。これは、テストを簡単に実行して信頼できるものにすることにいくらか反します。コードでテストを無視することは、他の人が関与し始めるときに最も安全なアプローチです。
私はいくつかのオプションを見ることができました、ここに既存のコードの変更を含む2つがあります。
オプション1-最も煩わしいコンパイル時のプラットフォーム検出
VSソリューションで、プリコンパイラーフラグを定義する別の構成を定義しますMONOWIN
(これは、Monoで使用するためにWindowsでコンパイルされたコード用であることを明示的に示すフラグになるためです)。
次に、Mono用にコンパイルしたときにテストを無視する属性を定義します。
public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
public IgnoreOnMonoFactAttribute() {
Skip = "Ignored on Mono";
}
#endif
}
この方法には元のソリューションをあざける必要があり、サポートする必要のある別の確認が追加されるため、この方法の利点を見つけるのは実際には困難です。
オプション2-やや煩わしい-ランタイムプラットフォームの検出
オプション1と同様のソリューションを次に示しますが、個別の構成は必要ありません。
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;
}
}
注1
xUnit runnerは、[Fact]
andでマークされている場合、メソッドを2回実行し[IgnoreOnMonoFact]
ます。(CodeRushはそれを行いません。この場合、xUnitは正しいと思います)。これは、すべてのテストメソッドがに[Fact]
置き換えられている必要があることを意味します[IgnoreOnMonoFact]
注2
CodeRushテストランナーは引き続きテストを実行しましたが、[IgnoreOnMonoFact]
テストを無視しました[Fact(Skip="reason")]
。これは、CodeRushがxUnitを反映していて、xUnitライブラリを使用して実際に実行していないことが原因であると思います。これはxUnitランナーで正常に機能します。