IntelliJのStructural Searchを使用してJunitの異常系のテストコードでfail文が無いコードを検索してみました。
TDDやってたら、そんなことにならなくね???との意見があるかもしれないけど、残念ながら現実はそうはなっていないもので・・・
現実がこうなっている以上、全部調べて直さないといけないわけなんですよね。
Structural Searchの定義
以下の値を検索条件として定義します。
try { $statement$; } catch ($Exception$ $exceptionVar$) { $catchStatement$; }
それぞれの変数($で囲まれている値)の説明
statement
例がが発生するであろうプロダクションコードの呼出と、fail文が実装されるべき箇所。
この変数に該当するコードにfail文が無いコードが問題となるので、条件定義でfail文がないものとしてあげる。
この変数には、下の画像のように設定をしてあげます。
ポイントはfail文がないことと、ステートメントが複数ある可能性があるので「Unlimited」にしてあげます。
Exceotion
catchされる例外のクラス名。これは、デフォルト設定のままでOK。
exceptionVar
catchした例外の変数名。これは、デフォルト設定のままでOK。
catchStatement
catchブロック内のステートメント。assertの前にコメントや余計なコードが有る可能性も否定出来ないので定義してあげます。
また、catchブロックの最後にも同じ変数を定義してあげます。
この変数には、下の画像のように設定をしてあげます。
ポイントは、minimum countを「1」にすることとMaximum countを「Unlimited」にしてあげること。
それと、期待値との比較をするassert文があること。
実行結果
fail文のないtry-catchのテストコード(異常系その1のテストメソッド)がヒットします。
残念ながら私が参画しているプロジェクトでは100箇所以上がヒットしました・・・。
おわり。