2013-04-29 10 views
11

引数を指定したテスト設定メソッドを使用できますか? フィクスチャの各テストごとに異なる設定が必要です。引数を指定したNunitテスト設定メソッド

我々は仮想的な考え方として、何か(または同様の方法を)持っていますか:

[SetUp] 
[Argument("value-1")] 
[Argument("value-2")] 
[Argument("value-3")] 
public void InitializeTest(string value) 
{ 
    //set env var with value 
} 
+0

http://www.nunit.org/index.php?p=parameterizedTests&r=:https://github.com/nunit/docs/wiki/TestFixture-Attribute

[TestFixture("Oscar")] [TestFixture("Paul")] [TestFixture("Peter")] public class NameTest { private string _name; public NameTest(string name) { _name = name; } [Test] public void Test_something_that_depends_on_name() { //Todo... } [Test] public void Test_something_that_also_depends_on_name() { //Todo... } //... } 

このコードはNUnitのドキュメントのWebサイトからである上

参照パラメータ化されたテストフィクスチャ2.5.5 – Oded

+1

* test *ではなく* setup *をパラメータ化しようとする理由は明確ではありません。 –

+0

この設定後、テストは同じ作業を行います。おそらくこのビットをテストに入れて、テストをパラメータ化するのがより理にかなっています! – dushyantp

答えて

17

セットアップはテストごとに1回実行され、1回のテストでは1つのSetUpとTearDownが実行されます。あなたが明示的にテストからあなたInitializeメソッドを呼び出し、その結果TestCase属性

public void InitializeTest(string value) 
{ 
    //set env var with value 
} 

[TestCase("Value-1")] 
[TestCase("Value-2")] 
[TestCase("Value-3")] 
public void Test(string value) 
{ 
    InitializeTest(value); 

    //Arange 
    //Act 
    //Assert 
} 

を使用してデータ駆動型テストを作成することができ、あなたはそれを使用して行うことができます

+0

ありがとう、これは私が試していた方法よりも賢明なようです。 – dushyantp

2

設定方法は、いくつかのプレテストの仕事を行うために使用され、ために必要な任意の値を設定するようにテストの準備を含めることになりますテストを実行するには、パラメータとして値を提供するのではなく、セットアップメソッドの中でこれらを設定することができます。

26

異なるパラメータでInitializeTestを呼び出す3つのテストそれぞれを持っていますTestFixture属性にパラメータを指定します。

クラス内のすべてのテストが同じパラメータに依存している場合は、この方法があります。

クラスには、同じパラメータをTestFixture属性に渡してコンストラクタが必要です。

[TestFixture("hello", "hello", "goodbye")] 
[TestFixture("zip", "zip")] 
[TestFixture(42, 42, 99)] 
public class ParameterizedTestFixture 
{ 
    private readonly string eq1; 
    private readonly string eq2; 
    private readonly string neq; 

    public ParameterizedTestFixture(string eq1, string eq2, string neq) 
    { 
     this.eq1 = eq1; 
     this.eq2 = eq2; 
     this.neq = neq; 
    } 

    public ParameterizedTestFixture(string eq1, string eq2) 
     : this(eq1, eq2, null) 
    { 
    } 

    public ParameterizedTestFixture(int eq1, int eq2, int neq) 
    { 
     this.eq1 = eq1.ToString(); 
     this.eq2 = eq2.ToString(); 
     this.neq = neq.ToString(); 
    } 

    [Test] 
    public void TestEquality() 
    { 
     Assert.AreEqual(eq1, eq2); 
     if (eq1 != null && eq2 != null) 
      Assert.AreEqual(eq1.GetHashCode(), eq2.GetHashCode()); 
    } 

    [Test] 
    public void TestInequality() 
    { 
     Assert.AreNotEqual(eq1, neq); 
     if (eq1 != null && neq != null) 
      Assert.AreNotEqual(eq1.GetHashCode(), neq.GetHashCode()); 
    } 
} 
関連する問題