ドキュメントによると: https ://github.com/nunit/docs/wiki/Order-Attribute
OrderAttributeをテストメソッドまたはフィクスチャに配置して、テストが実行される順序を指定できます。
私はこのドキュメントが2つの異なる方法で尊重されているのを見ていません。
次のTextFixtureのケースを検討してください
[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
これは、何よりもドキュメント/理解の欠陥として私を襲いますが、リンクされたドキュメントが「_またはfixture_」と述べている方法は、私が書くことができることを私に暗示しています
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
実際には、これは1、2、および3のコンパイラエラーです。
'Order'属性が重複しています
ただし、これが重複を直感的に処理できると非常に便利です。
@Aarskin単一の問題に関する議論が単一のgitHubの問題内に保持されている場合、それは私たち(NUnit
ここで説明しているバリアントは、基本的に#3055と同じです。 つまり、これは...
[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]
あなたが書いたのと同じです...
[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]
使用したい8つの属性の他の順序も同様です。 4つのTestFixture
属性はすべて同じクラスに配置されるため、NUnitはそのクラスを4回インスタンス化します。 4つのOrder
属性も同じクラスに配置され、テストには1つの順序しかないため、競合が発生します。
これはNUnitの制限ではありません。 これがC#属性構文の仕組みです。 注意すべき2つの重要なポイントがあります。
角かっこで囲まれた属性は、属性を受け入れることができるコード内の次の要素に適用されます。 この場合、それはクラスです。
[A、B、C]のような角括弧内の属性のシーケンスは、[A] [B] [C]のような別々の括弧のペア内の同じシーケンスとまったく同じ意味を持ちます。
スタイルの問題として、混乱を招くため、テストの複数のインスタンスが作成される原因となる属性でコンマ構文を使用することは避けています。
これが可能に書き直すことができOrder
のプロパティ/パラメータTestFixture
、私たちは、あなたが私たちのユースケースを与えることができることを考える前に? 通常、 Order
は、テストで順番に長い操作の一部を実行するシーケンスで統合テストを実行するために使用されます。 パラメータ化されたTestFixture
は通常、異なる入力データを使用して同じテストをテストするために使用されます。 特定の順序でそれを実行したいというシナリオは考えられません。
私のユースケースは論理的なビジネス回帰テストであり、TestFixtureのプロパティ/パラメーターはNUnitの使用方法を破ることができません。 これまで以上に、これらのフレームワークは単体テストだけでなく使用されています。
回避策として、複数のTestFixture
属性の代わりにTestFixtureSource
に切り替えることができます。 TestFixtureSourceAttribute
が1つしかない場合、フィクスチャはデータを返す順序で実行されます。