魂のBlog|勤怠管理と工数管理、経費精算ならチームスピリット

2011/06/16 19:02:26

ガバナ制限処方箋(1):テストデータ準備時のDMLをガバナ制限対象外にする

このエントリーをはてなブックマークに追加

ユニットテストのテストコードでもガバナ制限が同様に適用されます。

しかし、ユニットテストではテストデータを準備する際にデータベースアクセスが発生し、ガバナ制限を
超えてしまう場合があります。
そのような場合は、TestクラスstartTest()メソッドstopTest()メソッドを利用することで、テストデータ準備時のデータベースアクセスをガバナ制限の対象から外すことが可能です。

サンプル・コードを以下に示します。startTest()メソッド~stopTest()メソッドがガバナ制限の対象となり、それ以外のテストコードについてはガバナ制限にカウントされません

@isTest
private class TestClass {
static testMethod void doTest() {
Account over, t; // Test.startTest()メソッドがなければガバナ制限を超えている
over = new Account();
over.name = 'test' + 0;
insert over; // ガバナ制限上限の150回のDML操作を実行
// 1回のトランザクションで実行できるDML文の合計回数:150
System.debug('Start');
Test.startTest();
for(Integer i=1; i<=150; i++) {
t = new Account();
t.name = 'test' + i;
insert t;
}
Test.stopTest();
System.debug('End');
// Test.stopTest()メソッドがなければガバナ制限を超えている
over = new Account();
over.name = 'test' + 999;
insert over;
}
}

以上のように、Test.startTest()/Test.stopTest()メソッドをうまく活用することで、大量のテストデータを準備しなければならない場合でも、ガバナ制限を超えないようにコーディングすることができます。

テストコードに対して一律で適用できるようにコーディング規約に組み込んでしまえば納期ギリギリになったときに、ガバナ制限のためテストが不合格のためパッケージが作れない、という事態は回避できるようになります。

「スタッフブログ」へのコメントやご意見等ありましたら、 Facebookページまでお願いします。
twitterでもつぶやいてますので、ご興味のある方はぜひフォローをお願いします。

(倉谷)

admin
Page topへ