tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Exceptionとテストクラスについて

Exceptionとテストクラスについてなんとなく考えていることです。

f:id:tyoshikawa1106:20130623110510p:plain

基本的にExceptionエラーはcatch処理で拾って対応するようにしたいと考えているのですが、catch処理が入るとテストクラスでExceptionエラー発生時に確認しづらくなってしまいます。

例えば次のような感じです。

catchなし

f:id:tyoshikawa1106:20130623113107p:plain

catchあり

f:id:tyoshikawa1106:20130623112648p:plain

上記のようにcatchがあると処理としてはExceptionエラーが発生していないのでテストクラスは正常に通ります。このときcatch処理の部分も処理が実行されているのが確認できます。

f:id:tyoshikawa1106:20130623112904p:plain

これはこれでカバー率も向上していいと思うのですが、テストクラスで予期していなかったエラーを発見する機会がなくなってしまうと思いました。


そこで次の方法で対応出来ないか考えています。

  • Exception発生判定用のBoolean変数を容易し発生した時にTrueにする
  • テストクラスのSystem.assertEqualsでTrueではないことを確認する
処理例

これでテストクラス内でExceptionエラーが発生した場合にも発見できるようになります。

f:id:tyoshikawa1106:20130623114639p:plain

問題点

これでcatch使用時にもException発生を確認できるようになるのですが問題もありました。エラーメッセージからは判定フラグがTrueになっているということしか確認できないという点です。

System.debugで表示させる方法はどうかと思ったのですが、テストクラスの実行ログは開発者コンソールからは取得できませんでした。

考えられる対応方法として、Boolean型変数ではなくString型の変数にしてException発生時にExceptionメッセージを変数にセットするようにします。System.assertEqualsでは値があるかないかで判定させるようにすればエラー時にExceptionメッセージを確認できると思います。

これで対応できそうなのですが、なんとなく判定処理はBoolean型の方がいいんじゃないかと思っています。

後は発生するタイミングがわかれば画面で確認してしまうという方法とかどうかなと思いました。とりあえずはこんな感じです。