2011-07-11 7 views
3

以下のコード、、どのように私は明示的に例えばテスト

[Test()] 
public void Test() 
{ 
    try{ 
     GetNumber(); 
    } 
    catch(Exception ex){ 
     /* fail here */ 
    } 

    ... 
} 

を失敗する可能性があります、私ははgetNumberメソッドが例外をスローしたときに、私のテストに失敗します。

お知らせください。

多くのありがとうございます。

答えて

17

try/catch内でGetNumber()をラップする必要はありません。 GetNumber()がスローすると、テストは失敗します。

明示的に失敗する必要がある場合は、Assert.Fail()を使用してください。

+2

この特定のケースでは、Assert.DoesNotThrow(()=> GetNumber())を使用する必要があります – RJFalconer

1

すべてのテストに合格する必要があります。例外が予想される場合は、ExpectedException属性を使用する必要があります。コードが予期しない例外をスローした場合、テストは合格になります。

1

Assert.Fail()http://www.nunit.org/index.php?p=utilityAsserts&r=2.2.7

ものの、Assert.NoThrowにアサーション、またはそのようなことは、あなたのメソッドがスローしないことを保証する、おそらくそこにあります。

+0

ok、no Assert.NoThrow。あまりにも悪い、私はそれがはるかに読みやすいことがわかります –

+1

新しいバージョンを確認してください。 [Assert.DoesNotThrow](http://www.nunit.org/index.php?p=exceptionAsserts&r=2.6) –

+0

ニース!リンク –

3

GetNumber()が値を返す場合は、何をしようとしているべきではありません。代わりに、戻り値をアサートする必要があります。あなたが起こることを期待していない場合、例外のチェックを気にしないでください。 NUnitフレームワークはそれを処理し、あなたのためのテストに失敗します。

GetNumber()は、次の3つのいずれかを実行することができ、値を返さない場合は、次の

  1. 使用Assert.DoesNotThrowを - これは非常に明示的に他の人が提案してきたように、あなたは、単にないように選ぶことができます
  2. 意図文書化例外をキャッチします。テストの失敗はすでに例外によって通知されています。キャッチされていない例外がテストに失敗する
  3. 論理が明示的に失敗または合格する正当な理由があり、代わりに使用できる他のアサーションブロックを持たない(テストの意図をよりよく示すもの) 、使用

この場合、最初のオプションが最も明示的です。これは、例外がスローされた場合にのみ有効な面白い副作用が確認できる場合によく発生します。 GetNumber()が値を返さない場合でも、あなたは本当にあなたのメソッドの名前を変更を検討してください:)

+1

BTW、 3複雑な検証ロジックがあるため、[Assert.That with custom constraint class](http://www.nunit.org/index.php?p=constraintModel&r=2.5.9)を試してみてください。あなたはここで非常に複雑なアサーションをしているわけではないので、別のテストケースのために保存します:) –

0
[Test()] 
public void Test() 
{ 
    GetNumber(); 
} 

テストを失敗すると、それから、例外をスローすることと同じです。したがって、メソッドがスローすると、テストは失敗します。

関連する問題