2016-05-29 12 views
2

複数の可能なすべての組み合わせをテストする複数のテストメソッドがあります。しかし、私の現実世界のケースであり4つのパラメータ、ダース方法や複数の値があるので、それは大変な作業となりますNUnit TestFixtureコンストラクタの値と範囲属性の使用

[TestFixture] 
public class MyExampleTests 
{ 
    [Test] 
    public void TestedEntity_GivenParemeter_Passes(
     [Values(1, 2)] int inputA, 
     [Range(1, 4)] int inputB) 
    { 
     if (inputA > 0 && inputB > 0) 
      Assert.Pass(); 
    } 
} 

:私はこのような方法でNUnitのValueAttributeまたはRangeAttributeを使用することができますすべてのメソッドのすべての値を書き留めて、変更したい場合は、どこかで間違いをするかもしれません。

すべての値の組み合わせに対してテスト生成を個々のメソッドから移動して、TestFixtureボディに移動するにはどうすればよいですか?以下では動作しませんが、それは私が欲しいものを次のようになります。

[TestFixture] 
public class MyExampleTests2 
{ 
    readonly int inputA; 
    readonly int inputB; 

    public MyExampleTests2(
     [Values(1, 2)] int inputA, 
     [Range(1, 4)] int inputB) 
    { 
     this.inputA = inputA; 
     this.inputB = inputB; 
    } 

    [Test] 
    public void TestedEntity_GivenParemeter_Passes() 
    { 
     if (this.inputA > 0 && this.inputB > 0) 
      Assert.Pass(); 
    } 
} 

私はすでにTestFixtureAttributeはパラメータを取ることができますが、彼らは私が望むように動作しないことを知っています。私は、各パラメータにハードコードされた値を与えることしかできません。代わりに範囲を使用し、NUnitにすべての組み合わせのテストを作成させたいと思います。また、このソリューションをNUnit 2.6.4で動作させたいと思います。

答えて

8

あなたはValuesSourceを使用することができます。

[Test] 
public void TestedEntity_GivenParemeter_Passes(
    [ValueSource(nameof(FirstSource))] int inputA, 
    [ValueSource(nameof(SecondSource))] int inputB) 
{ 
    if (inputA > 0 && inputB > 0) 
     Assert.Pass(); 
} 

private static readonly int[] FirstSource = { 1, 2 }; 
private static readonly IEnumerable<int> SecondSource = Enumerable.Range(1, 4); 

あなたはパラメータ宣言の繰り返しを避けたい場合は、あなたがInputAInputBのプロパティを含む単一のタイプ、およびそのタイプの列を返されたソースを作成することができます。

関連する問題