本番環境に配置するには
テストコードを必ず書いて75%のコードカバレッジ
を実現しないといけない
という点がある。
なので
Force.comはPaaSとして
JUnitのようなテスティングフレームワークを
自分で持っている。
以下はForce.com開発者コースで使用したサンプル
Apexトリガのサンプルコード
のテストクラスである。
// Apex Code 演習6-1 テストクラスの作成(1)
// HelloWorldTestTriggerが実行され正常に動作しているかをテストする
//
// テストクラスにはアノテーションを指定する
// コード記述上限行数のガバナ制約対象外となる
@isTest
private class HelloWorldTestClass {
// テストメソッドには
// testMethodキーワードを必ず付ける
static testMethod void helloWorldTest(){
// テストデータを準備する
// システム管理者ユーザレコード入手
User adminuser = [SELECT id from User where alias = 'User'];
// 募集職種(Position__c)に20件テストデータを格納する
List<position__c> positions = new List<position__c>();
for (Integer i=0; i < 20; i++){
Position__c p = new Position__c();
p.Name = 'testName' + i;
p.Job_Description__c = 'testDescription' + i;
p.Hiring_Manager__c= adminuser.id;
positions.add(p);
}
// テスト実行
try{
// この行までで消費したガバナ制約は一旦カウント外にする
Test.starttest();
System.debug('Attempting to insert positions');
// 募集職種データ新規追加
// トリガがデータ新規追加により起動される
insert positions;
System.debug('Insert complete');
// テスト結果の評価
// トリガ実行後のデータを取得する
Map<id,position__c> positionMap =
new Map<id,position__c>(positions);
positions =
[select id,
name,
Hello__c
from Position__c
where id IN :positionMap.keySet()];
// 1件づつ結果を評価する
for (Position__c position:positions){
// 募集職種レコードIDがnullでないか
System.assertNotEquals(position.id,null);
// 項目「Hello__c」がWorldになっているか
System.assertEquals(position.Hello__c, 'World');
// デバッグログに
System.debug('position.id=' + position.id);
System.debug('position.name=' + position.name);
System.debug('position.Hello__c=' +
position.Hello__c);
}
} catch (System.DmlException e){
System.debug('We caught a DML exception: ' +
e.getDmlMessage(0));
}
// ガバナ制限リセット終了
Test.stoptest();
// 処理は書いていないが
// テスト中にinsertされたデータはロールバックされる
}
}
とても簡単アノテーション@isTestを
通常のApexクラスにつけるだけ。
メソッドのtestMethodキーワードをつけた箇所をてすとしてくれる。
Force.com IDEにはJUitのTestRunner風のGUIがあるので
テストも簡単。
しかもテストメソッド内でDB操作した内容がチャラになるのがうれしい。
なお
テストクラスで特定のユーザで実行したい場合は
Systemクラスをリファレンスで検索すれば
メソッドが出てくるはず(ど忘れしてしまった..)。
0 件のコメント:
コメントを投稿