2012-02-17 10 views
2

ユニットテストでは、NUnitのRange attributeを使用して、範囲内の関数への入力をテストしたいと考えています。この範囲の下限と上限は、(シングルトンパターン)クラスの定数プロパティにコード化されています。[Range]属性のクラス定数の使用

[Test] 
public void sometest([Range(MyClass.LOWER_LIMIT,MyClass.UPPER_LIMIT)] int var) 
{ 
    //Do something and assertive with the nice variable 
} 

しかし、このアプローチは動作しません:私はこのような何か、クラスのプロパティとRange attributeの始点と終点を指定したいと思います。ドキュメント自体からは明らかではありませんが、Range attributeには定数変数を指定する必要があります。私のクラス定数は定義された静的なプロパティですが、これは定数変数を取得します。

私はこの質問に投稿して回答しましたが、これは本当にNUnitのクラス定数に基づいて範囲パラメータを設定する方法ですか?または、より洗練されたソリューションがありますか?

答えて

2

次の例は、NUnitのRange属性で使用される値として、クラスの(定数)プロパティを使用する方法を示しています。 Range属性は定数のみで動作するよう

const int LO_LIM = 1; 
const int HI_LIM = 10; 

[Test] 
public void assertConstantsCorrect() 
{ 
    //Will fail if constants change during development! 
    Assert.AreEqual(MyClass.LOWER_LIMIT,LO_LIM); 
    Assert.AreEqual(MyClass.UPPER_LIMIT,HI_LIM); 
} 

[Test] 
public void sometest([Range(LO_LIM,HI_LIM)] int var) 
{ 
    //Do test 
} 

最初のステップは、あなたのテストクラスの定数を定義することです。これらの定数は、クラスのプロパティで定義されている定数と同じ値をとります。

Secondは、対応することを確認するために作成されたテストです。遅くともMyClassの定数が変更された場合、このテストの失敗によりこの変更が通知されます。このテストが合格しなかった場合、それらの定数を使用している他のテストは、誤った検査に依存するので無効と見なすことができます。

Lastyは[Range(start, end)]句の値を使用する実際のテストです。

はまた、あなたはまた、固定具のすべてのテストがassertConstantsCorrect()が失敗した場合に失敗するためにassertConstantsCorrect()方法について[TestFixtureSetUp]属性の代わりに、[Test]属性を使用することができます。 さらに別の方法は、プログラマが注釈を付けている特定のメソッドに対してカスタム属性を働かせて、assertConstantsCorrect()が失敗したときにそれらのメソッドを失敗させることです。

関連する問題