tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Test MethodのTest.loadについて

Test MethodのTest.loadを使うとテストクラス内で静的リソースのファイルを読み込みテストデータを作成することができます。

以下サンプルです。

静的リソースにアップロードしてあるファイルの内容はこんな感じです。
f:id:tyoshikawa1106:20130704220620p:plain

取引先の情報をカンマ区切りで保存してあります。

静的リソースにアップロードするとこんな感じです。
f:id:tyoshikawa1106:20130704220754p:plain

サンプルのSystem.assertEqualsで静的リソースにアップしたファイルの情報が正常に読み込まれ登録されていることを確認しています。

補足

  • Test.loadの第二引数では静的リソースの名前をセットします。
  • 名前は大文字と小文字を区別しません。
  • 戻り値はList<sObject>型となります。
  • テストレコードを挿入するためのMethodです。
  • 静的リソースはCSVファイルの拡張子で終わるカンマ区切りのファイルです。
  • ファイルにはテストレコードのフィールド名と値が含まれています。
  • ファイルの最初の行はフィールド名、それに続く行はフィールド値となります。
  • サポートされているMIMEタイプは、次のとおりです。
    • text/csv
    • application/vnd.ms-excel
    • application/octet-stream
    • text/plain

詳細はApexGuideのTest Methodで確認できます。

Test Methods
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_test.htm

補足の補足

何回か使ってみて悩んだことを追記します。

  • 静的リソースにZip形式でアップロードできない。
    • サポートされているMIMEタイプにZipは含まれていませんでした。なのでCSVファイルは一つずつアップする必要があるみたいです。ファイル数が多いと静的リソース内がぐちゃぐちゃになってしまうため、ある程度一緒になるように名前の付け方を考えたり説明文を記載するようにした方がいいみたいです。
  • 保存失敗時にシステムエラーが発生する
    • CSVファイル内に参照のみの項目が含まれていたりするとシステムエラーが発生します。このときのエラーメッセージが原因を判断しづらいので注意が必要です。ちなみにcatch処理で拾うこともできないみたいです。

f:id:tyoshikawa1106:20130706101626p:plain

  • 文字コードに注意する
    • なにも考えずにShift-Jisで対応していたところ漢字・ひらがなのデータが正常に読み込まれずにエラーが発生しまいた。きちんとUTF-8でアップするように気をつける必要があります。データローダの場合は設定のところでUTF-8でEXPORTするようにした方がいいかもしれないです。

f:id:tyoshikawa1106:20130706101833p:plain

  • 繰り返し処理に注意
    • Test.loadは使用時に自動でINSERTまで実行されます。ループ処理など繰り返し実行する場合151回以上使用するとDmlExceptionに引っかかってしまいます。使用は必要最低限に抑えるようにした方がいいと思います。