Salesforceテストでは、特定のタイプのユーザーとしてテストの一部を実行するためにUserオブジェクトを作成する必要がある場合があります。
ただし、Salesforce Summer 08の更新以降、同じテストでユーザーオブジェクトと通常のオブジェクト(アカウントなど)の両方を作成しようとすると、次のエラーが発生します。
MIXED_DML_OPERATION、非セットアップオブジェクトを更新した後(またはその逆)、セットアップオブジェクトでのDML操作は許可されません:ユーザー、元のオブジェクト:アカウント
エラーは、Eclipse / Force.com IDEからテストを実行する場合には発生しませんが、Salesforceにデプロイしてから、Salesforce内からテストを実行する場合に発生することに注意してください。
このエラーを回避するためにテストを書き直すにはどうすればよいですか?
エラーの原因となるテストの簡単な例を次に示します。
static testMethod void test_mixed_dmlbug() {
Profile p = [select id from profile where name='(some profile)'];
UserRole r = [Select id from userrole where name='(some role)'];
User u = new User(alias = 'standt', email='standarduser@testorg.com',
emailencodingkey='UTF-8', lastname='Testing',
languagelocalekey='en_US',
localesidkey='en_US', profileid = p.Id, userroleid = r.Id,
timezonesidkey='America/Los_Angeles',
username='standarduser@testorg.com');
Account a = new Account(Firstname='Terry', Lastname='Testperson');
insert a;
System.runAs(u) {
a.PersonEmail = 'test@madeupaddress.com';
update a;
}
}