tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:<apex:inputFile>とテストクラス

apex:inputFileを使ってCSVファイルの値を登録するような処理のテストクラスを作るときに、テストクラス内では画面からファイルを取り込ませるといった操作はできないので別の方法で用意する必要があります。

静的リソースにテスト用のファイルアップロードしておいて、それをテストクラス内で読み込む方法がいいと思います。ただ、Visualforceページだと$Resourceという感じで簡単に取得できるのですが、Apexクラス内では使用できません。

Apexクラス内で取得したい場合、静的リソースは標準オブジェクトとして用意されているので、SOQLで情報を取得できます。
f:id:tyoshikawa1106:20130819001112p:plain

SOQLで静的リソースの情報を取得した後は、次のような感じでBodyとファイル名に値をセットできます。

SOQLで取得する場合ですが、Zip内のファイルを取得というようなことができないみたいです。なのでテスト用のファイルをアップロードするときは1件ずつアップする必要があります。1件ずつアップしていくとバラバラになってしまうので名前や説明で判断しやすくした方がよさそうです。

ちなみに静的リソースオブジェクトですが、@isTest(SeeAllData=true)を使用しなくても既存のレコードにアクセスすることができました。なのでテストクラス内で作成というような処理は必要無いみたいです。