Exceptionとテストクラスについてなんとなく考えていることです。
基本的にExceptionエラーはcatch処理で拾って対応するようにしたいと考えているのですが、catch処理が入るとテストクラスでExceptionエラー発生時に確認しづらくなってしまいます。
例えば次のような感じです。
catchなし
catchあり
上記のようにcatchがあると処理としてはExceptionエラーが発生していないのでテストクラスは正常に通ります。このときcatch処理の部分も処理が実行されているのが確認できます。
これはこれでカバー率も向上していいと思うのですが、テストクラスで予期していなかったエラーを発見する機会がなくなってしまうと思いました。
そこで次の方法で対応出来ないか考えています。
- Exception発生判定用のBoolean変数を容易し発生した時にTrueにする
- テストクラスのSystem.assertEqualsでTrueではないことを確認する
処理例
これでテストクラス内でExceptionエラーが発生した場合にも発見できるようになります。
問題点
これでcatch使用時にもException発生を確認できるようになるのですが問題もありました。エラーメッセージからは判定フラグがTrueになっているということしか確認できないという点です。
System.debugで表示させる方法はどうかと思ったのですが、テストクラスの実行ログは開発者コンソールからは取得できませんでした。
考えられる対応方法として、Boolean型変数ではなくString型の変数にしてException発生時にExceptionメッセージを変数にセットするようにします。System.assertEqualsでは値があるかないかで判定させるようにすればエラー時にExceptionメッセージを確認できると思います。
これで対応できそうなのですが、なんとなく判定処理はBoolean型の方がいいんじゃないかと思っています。
後は発生するタイミングがわかれば画面で確認してしまうという方法とかどうかなと思いました。とりあえずはこんな感じです。