2013-02-22 10 views
8

nunitの設定方法に引数を追加する方法はありますか:public void SetUp(Point p = null) { /*code*/ }引数を使ってnunitセットアップを作成する方法はありますか

私はそれを試してみましたが、私はあなたのポイントは、コードの重複を避けるためであると考えて、次の例外SetUp : System.Reflection.TargetParameterCountException : Parameter count mismatch

+1

限り私が知っているように、 '[Setup]'メソッドで引数を使うことはできません。ただし、* NUnit * [action attributes](http://nunit.com/index.php?p=actionAttributes&r=2.6.2)のメリットがありますか? –

+0

NUnitテストランナーは、 'SetUp'メソッドに引数を渡しません。何のためにそれが必要ですか? –

答えて

1

を得ました。 SetUp()で使用されているオーバーリッドメソッドを使用して、ベースクラスを抽出してみます。 parametrised TestFixtureを使用 すべての派生クラスがoverriten OnSetUp(で調製したオブジェクトと、基本クラスからテストを実行する)

[TestFixture] 
public class BaseTestsClass 
{ 
    //some public/protected fields to be set in SetUp and OnSetUp 

    [SetUp] 
    public void SetUp() 
    { 
     //basic SetUp method 
     OnSetUp(); 
    } 

    public virtual void OnSetUp() 
    { 
    } 

    [Test] 
    public void SomeTestCase() 
    { 
     //... 
    } 

    [Test] 
    public void SomeOtherTestCase() 
    { 
     //... 
    } 
} 

[TestFixture] 
public class TestClassWithSpecificSetUp : BaseTestsClass 
{ 
    public virtual void OnSetUp() 
    { 
     //setup some fields 
    } 
} 

[TestFixture] 
public class OtherTestClassWithSpecificSetUp : BaseTestsClass 
{ 
    public virtual void OnSetUp() 
    { 
     //setup some fields 
    } 
} 

も有用であり得ます。クラス内のテストはTestFixture、SetUpメソッドごとにランチされます。 しかし、(あなたが発見したとして)

パラメータ化された器具を使用すると、属性のみ

で許可されている引数を使用することができるという事実によって制限されていることを覚えておいてください

使用法:

[TestFixture("some param", 123)] 
[TestFixture("another param", 456)] 
public class SomeTestsClass 
{ 
    private readonly string _firstParam; 
    private readonly int _secondParam; 

    public WhenNoFunctionCodeExpected(string firstParam, int secondParam) 
    { 
     _firstParam = firstParam; 
     _secondParam = secondParam; 
    } 

    [Test] 
    public void SomeTestCase() 
    { 
     ... 
    } 
} 
関連する問題