Newer Version Available
テストメソッドでの混合 DML 操作
データ操作言語 (DML) 操作を実行するコードが System.runAs メソッドブロックで囲まれている場合は、テストメソッドで設定の sObject と設定以外の sObject を含む混合 DML 操作の実行が許可されます。また、テストメソッドがコールする非同期ジョブで DML も実行できます。たとえば、こうした方法を使用して、ロールのあるユーザとその他の sObject を同じテスト内で作成できます。
設定の sObject は、「DML 操作で同時に使用できない sObject」にリストされています。
例: System.runAs ブロックでの混合 DML 操作
この例では、混合 DML 操作を System.runAs ブロックで囲み、混合 DML エラーを回避する方法を示します。System.runAs ブロックは、現在のユーザのコンテキストで実行されます。このブロックは、ロールを持つテストユーザとテスト取引先を作成するという混合 DML 操作を実行します。
テストメソッドでの @future を使用した混合 DML エラーの回避
単一トランザクション内の混合 DML 操作は許可されていません。同じトランザクション内で設定の sObject と別の sObject に対する DML は実行できません。ただし、非同期ジョブの一部としてある種類の DML を実行し、別の非同期ジョブまたは元のトランザクションで他の種類を実行することは可能です。このクラスには、後続の例でクラスによってコールされる @future メソッドが含まれます。
このクラスは、前のクラスのメソッドをコールします。