有时在 Salesforce 测试中,您需要创建用户对象以作为特定类型的用户运行部分测试。
但是,自从 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;
}
}