[salesforce]SmartFactory-for-Force.com
今回はApexのテストコードを書く上で避けられないテスト用のレコード作成を簡単にできるライブラリ「SmartFactory」をご紹介させていただきます。
このライブラリを使用すると、たった1行のコードで標準およびカスタムオブジェクトのレコードを作成することができ、さらに、すべてのフィールドにデフォルト値を与えることができます。
以下、簡単な使い方を見ていきましょう。
1.標準オブジェクトのレコードを作成する
Account account = (Account)SmartFactory.createSObject(‘Account’);
[/php]
カスタムオブジェクトの場合は、
Custom_Object__c customObject = (Custom_Object__c)SmartFactory.createSObject(‘Custom_Object__c’);
[/php]
上記のように書くと作成できます。レコードタイプを持つオブジェクトにも対応していて、デフォルトのレコードタイプのレコードが作成されます。必須項目はデフォルト値が設定されます(下記、デフォルト値一覧表を参照ください)。
| データ名 | デフォルト値 | 
|---|---|
| URL | http://test1.com | 
| チェックボックス | false | 
| テキスト | 1 | 
| テキスト(暗号化) | s | 
| テキストエリア | 1 | 
| パーセント | 1 | 
| メール | test1@test.com | 
| テキストエリア (リッチ) | 1 | 
| ロングテキストエリア | 1 | 
| 数値 | 1 | 
| 選択リスト | *添え字0の選択肢 | 
| 選択リスト (複数選択) | *添え字0の選択肢 | 
| 通貨 | 1 | 
| 電話 | 123-456-7890 | 
| 日付 | *実行時の日付 | 
| 日付/時間 | *実行時の日付/時間 | 
*主従関係/参照関係の場合はデフォルト値が設定されません。
2.親のレコードも一緒に作成する
[php] Contact contact = (Contact)SmartFactory.createSObject(‘Contact’, true); [/php]
第2引数に true を指定すると、親である取引先レコードも一緒に作成されます。同じメソッドで参照関係(自己参照除く)のオブジェクトも1段階まで作成されます。
3.オブジェクトのレコードリストを作成する
[php] List<SObject> contactsAsSObjects = SmartFactory.createSObjectList(‘Contact’, false, 400); [/php]
第2引数に「参照/主従関係のオブジェクトを一緒に作成するか」を指定し第3引数に「作成したいレコード数」を指定します。また、各レコードのデフォルト値が 連番 になります。上記の例では、取引先責任者が400件のレコードリストが作成されLastNameフィールドに 0, 1, 2,・・・ といったような値が設定されます。
4.すべてのフィールドにデフォルト値を設定する
[php]
SmartFactory.FillAllFields = true;
Account account = (Account)SmartFactory.createSObject(‘Account’);
[/php]
上記のようにすると、全フィールドにデフォルト値が設定されます。任意のフィールドにデフォルト値を設定したい場合は、下記のように指定します。
[php] SmartFactory.IncludedFields.put(‘Account’, new set<String>{‘Phone’}); [/php]
逆に任意のフィールドにデフォルト値を設定したくない場合は、下記のように指定します。
[php] SmartFactory.ExcludedFields.put(‘Account’, new set<String>{‘Phone’}); [/php]
使ってみた感想と注意点
- SmartFactoryを使えば単純な構造のオブジェクトレコードの作成が簡単にできる
- 特に、参照/主従関係1段階までを自動で作成できるのは便利
- 参照/主従関係2段階 以上の関連先オブジェクトは手動で作成する必要がある
- 1:Nの親子関係のレコードを作成できない
→現状、親レコードも指定した数だけ作成される。 1:Nをオプションで切り替えられるようになるともっと使い易くなりますね。
- 参照/主従関係を持つレコードリストを作成時、レコードの数分insertが呼び出される
→参照先のオブジェクトは1つずつinsertされています。 151件以上のレコードリストを作成するとガバナ制限にひっかかります。
- デフォルト値の設定を変更できない
→「デフォルト値の指定を可能にするMapの提供」は今後対応予定とのことなので、 バージョンアップに期待ですね。
インストール方法
コード・シェア(http://developer.force.com/codeshare/ProjectPage?id=a063000000Db0CSAAZ)のインストーラを使うかGithub(https://github.com/mbotos/SmartFactory-for-Force.com)からソースコードをダウンロードし、Force.com IDEを用いてクラスを作成して使用する方法があります。
ただ、現時点(2012年7月)では、インストーラを使うと古いバージョンのSmartFactoryが入ってしまうようですので上記Githubからソースコードをダウンロードして使うことをオススメします。
テスト用のレコードを作成する際には、ぜひ試してみてくださいね。

