web-dev-qa-db-ja.com

xUnit.netでテストクラス全体をスキップする

NUnitのように特定のクラスからすべてのテストをスキップすることは可能ですか

[TestFixture]
[Ignore("Reason")]
public class TestClass {
}
31
dwonisch

いいえ-現在、そのような施設はありません。

XUnitで効果を達成する1つの簡単な方法は、publicをコメント化することです-プライベートクラスは反映されません(明らかに、スキップリストには表示されません)。

これの必要性が十分に一般的であると思われる場合は、CodePlexの問題としてログに記録することを検討してください(テストクラス全体のテストをスキップする必要がある場合に出くわさないので、個人的には賛成することはできません)。

更新:もう1つの方法は、クラスにTraitAttributeを置き、(xunit.consoleランナーを使用していると仮定して)/-trait traitNameで実行することによってフィルターで除外することです。 (たとえば、ExplicitAttribute、保留テストのBDDフレームワーク手法の一部の側面、および同様のセマンティクスをそのように実現できます。もちろん、これらのフィルタリング手法を使用すると、レポートにレポートが表示されないという大きな問題があります。 )

更新2:あなたはできる

const string skip = "Class X disabled";

[Fact(Skip=skip)]
void Test() {}

次に、const string skip = nullに変更して、スキップを元に戻すことができます。これの(欠点)は、テストがテストリストにスキップされたテストとして引き続き表示されることです。通常、テスト実行レポートに理由が含まれます(これをprivateにすると、忘れられる可能性が高くなります)。 )

32
Ruben Bartelink

これは、カスタムITestClassCommandを使用して実現できます。

http://mariangemarcano.blogspot.be/2010/12/xunitnet-running-tests-testcategory.html を参照してください

1
bob

エラーxUnit1000を回避するための私のハックは次のとおりです。テストクラスはパブリックである必要があります(単一のファクトで確認します。理論もこの方法でハッキングできると思います)。

// Uncomment to enable tests
//public class FactSwitch : FactAttribute { }

// Uncomment to disable tests
internal class FactSwitch : Attribute { }

public class MyTests
{
    [FactSwitch]
    public void MyTest1()
    {
        "it".ShouldBe("it");
    }
}
1
r.pankevicius

コードへの最小限の変更を必要とする別のハックは次のとおりです

using FactAttribute = System.Runtime.CompilerServices.CompilerGeneratedAttribute;
using TheoryAttribute = System.Runtime.CompilerServices.CompilerGeneratedAttribute;

互換性のある任意の属性を置換に使用できます。

InlineDataAttributeも使用する場合、既存の互換性のある属性はないと思うので、置換を定義する必要があります。

using InlineDataAttribute = DummyDataAttribute;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
internal class DummyDataAttribute : Attribute
{
    public DummyDataAttribute(params object[] data)
    {
    }
}
0
Andriy Svyryd

コンパイラの警告なしにクラス全体を一時的に無効にするさらに別の方法を見つけました。

無効:

[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "xUnit1000:Test classes must be public", Justification = "Disabled")]//*/
/*
public /**/class DatabaseTests
{
}

/* 1行上(つまり、alt + upを使用):

/*
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "xUnit1000:Test classes must be public", Justification = "Disabled")]//*/
public /**/class DatabaseTests
{
}

SupressMessageの完全な名前空間パスを使用しても、使用方法が台無しになることはありません。

0
Miq

最初の質問からほぼ1年後に理由を追加します。実際のサーバーAPIを呼び出す一連のテストがあり、オンデマンドで実行したいと思います。 nUnitの場合、Ignore属性があります。そのセットを使用すると、テストランナーはそれらのテストをスキップしますが、手動で実行することもできます。

xUnitにはそのような機能はありません。最も近いのは、そのようなクラスレベルの属性を設定し、実行したいときにコメント化することです。

0
Rana Hossain