2017-10-31 3 views
1

言い換えれば、ユニットテストのすべてまたはほとんどにthrows Exceptionを追加する必要がありますか? Android Studioでユニットテストを生成すると(コマンドN - >テストメソッド)、デフォルトで例外がスローされます。例:ユニットテストでデフォルトで「例外をスローする」べきですか?

@Test 
public void someMethod() throws Exception { 

} 
+0

ユニットテストメソッドにデフォルトでスローを追加する有効な理由はありません。しかし、そのオプションはデフォルトでコードテンプレートに設定することができます – alainlompo

答えて

0

私は説得力のあるケースは、すべてのテストケースがExceptionをスローするように宣言することを要求するために作ることができるとは思いません。

特定の例外(例外が公約の一部を形成する箇所)をスローするコードでは、テストケースでこれらの例外パスが解決され、ルートExceptionを使用すると、アサーションが単純化される可能性があります。同様に、おそらくの数字が返されると主張するのではなく、任意の数値が返されることを単にアサートすることによって数値を計算するメソッドをテストすることに似ています。

さらに、チェック例外をスローするコードでは、デフォルトの文throws Exceptionは、テストコードによってスローされた特定のチェック例外をマスクします。これは、あなたのテストを書くときに貴重なヒントまたは手がかりを否定します。たとえば、次のコード...

public void someMethod throws SomeMethodFailedException { 
    ... 
} 

は...明示的SomeMethodFailedExceptionがスローされたパスをテストするテストケースの恩恵を受ける可能性があります。テストケースがデフォルトでthrows Exceptionで宣言されていない場合、コンパイラはSomeMethodFailedExceptionがスローされたパスをテストするように通知するように効果的に機能します。

要約すると、Exceptionを投げるようにすべてのテストを宣言すると、テストケース側で例外契約を踏んだり例外パスを無視したりすることができます。

もちろん

あなたも例外パスをテストしながら、その宣言を持つことができますが、すべてのテストでthrows Exceptionの使用がでヒント(そしておそらく奨励または検証)ないので、上記の問題はthrows Exceptionと宣言するの不変の結果ではありませんテスト意味のあるテストシナリオとして例外パスを扱わないアプローチ。

Androidスタジオのデフォルトテンプレートがこのような方法でテストを作成するのであれば、そのデフォルトを変更するか、独自の「テストメソッド」ショートカットを作成することができます。

0

あなたはテストであまりにも多くの例外を使用するべきではありません。実際には(ほとんどの場合は)それらをまったく使用しないでください。

ユニットテストは、機能しているかどうかを確認する機能です。

あなたは、より明確で効果的なテストになる、アサーションを使用して関数をテストする方法を見つける必要があります。

関連する問題