[SFDC]コントローラ拡張クラスのテストコードを書く

コントローラ拡張クラスのテストコードの書き方が分からなくて困った。忘れないようにめも。

■コントローラ拡張クラスとは

コントローラ拡張クラスとは、標準コントローラをコンストラクタ引数にとるApexクラスのこと。引数の標準コントローラからgetRecordで画面のオブジェクトを取得できるので、GETパラメータなどを駆使することなくオブジェクトを操作できたいへん便利。便利なのでカスタムオブジェクトのレコードを操作するvisualforceページを作成する際はだいたいコントローラ拡張も作成してたんだけどテストコードの書き方が良く分からなかった。visualforce開発者ガイド112ページくらいに「カスタムコントローラおよびコントローラ拡張のテスト」という章はあるけど書かれているのはカスタムコントローラのテスト方法のみなのが笑える、いや笑えない。

■標準コントローラを生成→コントローラ拡張に食わせればOK

まぁカスタムコントローラのテスト方法を参考にすればなんとかなるだろ、ということで試してみる。開発者ガイドで紹介されているカスタムコントローラのテスト方法をかんたんに書くと以下のような感じ。

今回はコントローラ拡張をテストしたいので、上記の2で標準コントローラをコントローラ拡張に渡してやる必要がある。つまり、1と2の間で標準コントローラを生成しなければならない。
…標準コントローラのインスタンス化???
標準コントローラはApex的にはApexPages.StandardController型として表す。これをnewするわけだが、引数なしだとそんなコンストラクタは定義されていないといって怒られる。んー…、標準コントローラはオブジェクトに関連づくものなので、newするときにオブジェクトを渡してやれば良いのでは?
ApexPages.StandardController stdCont = new ApexPages.StandardController(new MyObject__c());
こんな感じで書くとコンパイル通った。じゃあこれをコントローラ拡張に渡してやればいけそうだね、ということで書いたのが以下のコード。

コンパイルが通りテストも正常に実行できた。

■まとめ:コントローラ拡張のテストの手順

1.コントローラを利用するvisualforceページをテスト実行時の画面として設定する
2.画面で操作するオブジェクトを生成する
3.標準コントローラを生成する。2で生成したオブジェクトをコンストラクタに渡す。
4.コントローラ拡張を生成する。3で生成した標準コントローラをコンストラクタに渡す。
5.コントローラ拡張の独自メソッドを実行する
6.実行結果をテストする


コメントを残す