Translate

2011年5月3日火曜日

Apexクラスのテストコードサンプル

Force.comの特徴に

本番環境に配置するには

テストコードを必ず書いて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 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...