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へ