この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

テストメソッドでの混合 DML 操作

テストメソッドでは、DML 操作を実行するコードが System.runAs メソッドブロックで囲まれている場合、DML 操作で同時に使用できない sObjectに記載された sObject とその他の sObject の間の混合 DML 操作の実行が許可されます。たとえば、これによりロールとその他の sObject を持つユーザを同じテスト内で作成できます。

例: System.runAs ブロックでの混合 DML 操作

この例では、混合 DML 操作を System.runAs ブロックで囲み、混合 DML エラーを回避する方法を示します。System.runAs ブロックは、現在のユーザのコンテキストで実行されます。このブロックは、ロールを持つテストユーザとテスト取引先を作成するという混合 DML 操作を実行します。

テストメソッドで Test.startTestTest.stopTest を使用して混合 DML エラーを回避する

混合 DML 操作を実行するコードブロックを System.runAs ブロックで囲んでも、混合 DML 例外エラーが返されることがあります。これは、テストメソッドが、グループの削除など、他の操作とは混合できない DML 操作を実行する future メソッドをコールした場合に発生する可能性があります。この場合、混合 DML 例外が返されたら、future メソッドコールを行うコードブロックを、Test.stopTest および Test.startTest ステートメントで囲みます。

この例では、Test.startTest および Test.stopTest ステートメントで delete ステートメントを囲むことにより、テストで混合 DML 例外エラーを回避する方法を示します。delete ステートメントにより、混合 DML 操作は future メソッドで実行されることになるため、ステートメントを Test.startTest および Test.stopTest ステートメントで囲みます。delete ステートメントはトリガを起動し、Util クラスの deleteGroup future メソッドをコールして取引先挿入トリ��ですでに挿入されていたグループを削除します。

これは、混合 DML 操作を起動するテストクラスです。取引先挿入および削除がトリガを起動します。

これは、グループを挿入する取引先挿入トリガです。

これは、future メソッドをコールしてグループを削除する取引先削除トリガです。

これは、グループを削除する future メソッドです。