有时在Salesforce测试中,您需要创建用户对象以将特定类型的用户作为测试的一部分运行。如何避免Salesforce测试中创建用户的MIXED_DML_OPERATION错误
然而,由于Salesforce的夏季08更新,尝试创建在同一个测试引线的两个用户对象和正常对象(如会计)以下错误:该错误不
MIXED_DML_OPERATION, DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): User, original object: Account
注当您从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='[email protected]',
emailencodingkey='UTF-8', lastname='Testing',
languagelocalekey='en_US',
localesidkey='en_US', profileid = p.Id, userroleid = r.Id,
timezonesidkey='America/Los_Angeles',
username='[email protected]');
Account a = new Account(Firstname='Terry', Lastname='Testperson');
insert a;
System.runAs(u) {
a.PersonEmail = '[email protected]';
update a;
}
}
等待,我们需要插入一个用户记录呢?我认为你可以简单地初始化新的User实例,并直接在system.runAs()中使用 – 2011-09-05 12:42:54
但是如果我需要多个/ new/user,该怎么办?我打算用多个system.runAs()来查看我是否可以为我的新用户设置用户标识符。 – tggagne 2012-03-20 03:08:23
它仍然有效 - 你不需要插入用户。另外,如果您要选择当前用户,system.runAs()的用法是什么? – 2012-05-04 10:36:45