しおしお

IntelliJのあれやこれや

IntelliJのStructural Searchでfail文のない異常系テストコードを抽出

IntelliJのStructural Searchを使用してJunitの異常系のテストコードでfail文が無いコードを検索してみました。

TDDやってたら、そんなことにならなくね???との意見があるかもしれないけど、残念ながら現実はそうはなっていないもので・・・
現実がこうなっている以上、全部調べて直さないといけないわけなんですよね。

Structural Searchの定義

以下の値を検索条件として定義します。

try {
    $statement$;
} catch ($Exception$ $exceptionVar$) {
    $catchStatement$;
}

それぞれの変数($で囲まれている値)の説明

statement

例がが発生するであろうプロダクションコードの呼出と、fail文が実装されるべき箇所。
この変数に該当するコードにfail文が無いコードが問題となるので、条件定義でfail文がないものとしてあげる。

この変数には、下の画像のように設定をしてあげます。
f:id:sioiri:20120906224848p:plain

ポイントはfail文がないことと、ステートメントが複数ある可能性があるので「Unlimited」にしてあげます。

Exceotion

catchされる例外のクラス名。これは、デフォルト設定のままでOK。

exceptionVar

catchした例外の変数名。これは、デフォルト設定のままでOK。

catchStatement

catchブロック内のステートメント。assertの前にコメントや余計なコードが有る可能性も否定出来ないので定義してあげます。
また、catchブロックの最後にも同じ変数を定義してあげます。

この変数には、下の画像のように設定をしてあげます。
f:id:sioiri:20120906225833p:plain

ポイントは、minimum countを「1」にすることとMaximum countを「Unlimited」にしてあげること。
それと、期待値との比較をするassert文があること。

実行結果

fail文のないtry-catchのテストコード(異常系その1のテストメソッド)がヒットします。
f:id:sioiri:20120906230054p:plain

残念ながら私が参画しているプロジェクトでは100箇所以上がヒットしました・・・。

おわり。