2012-04-24 3 views
7

私はNUnitを使用しています。テストケースが完了したら、それはティアダウン方式に移行し、NUnit。ティアダウンメソッドにパラメータを渡す

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
    ... 
} 

:私は私の試験方法はlikeso定義されています。何がしたいのかは、テストメソッドに渡されるが、TearDownメソッドに渡されるテストケースパラメータを持つことです。このような

何か:

[TearDown] 
public void TearDown(string firstName, string lastName) 
{ 
    ... 
} 

私はNUnitのは、このアウトオブボックスをサポートしていることを願っています。それ以外の場合は、テストデータをコレクションに格納するために、テストメソッドに注文コードを記述する必要があります。そのコレクションはTearDownメソッドで使用されます。

誰もが思考を持っているなら..素晴らしいだろう!おかげさまで キリスト教

答えて

9

テストフィクスチャでは、テストごとにTearDownとSetUpが実行されます。

[TestCase("Joe", "Smith")] 
public void Test1(string firstName, string lastName) { ... } 

[Test] 
public void Test2() { ... } 

[TestCase(10)] 
public void Test3(int value) { ... } 

TearDownメソッドにはどのような署名が必要ですか?

ですから、答えはいいえです。 NUnitはテストパラメータをTearDownメソッドに渡すデフォルトの方法を提供しません。そして私はそれができないと思う。この機能を手動で追加する必要があります。

+0

私は多くのグーグルでそれをサポートしていないと思った。しかし、あなたの答えに感謝します。常にチェックするのは良いことです。 –

4

実際これも可能です。

TearDownでTestContext.CurrentContext.Test.Nameを参照すると、渡されたパラメータを含む完全なメソッドシグネチャを取得できます。あなたはそれを解析する必要がありますが、そこにあります。

2

TearDown機能のTestContextから直接パラメータを参照することは可能です。

このようなものです。

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
} 

[TearDown] 
public void TearDown() 
{ 
    string firstName = TestContext.CurrentContext.Test.Arguments[0] as string; 
    string lastName = TestContext.CurrentContext.Test.Arguments[1] as string; 
} 

それはTestContext.CurrentContext.Test.Argumentsだけでオブジェクト配列ですので、我々はArguments[]にすべての可能な値を扱う確実にするために注意するべきであるにかかわらず、個々の署名のTestFixture内のすべてのテストのために呼び出されることに留意する必要があるが、それは確かにTearDownのこれらのオブジェクトを参照することが可能ですです

+0

+1。 **注:誰かが答え方法を使うつもりですが、NUnitのバージョンはチェックされていなければなりません - [Arguments]の配列は[v3.7]から利用可能です(https://github.com/nunit/nunit/pull/2096)、 – Serg