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 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...