Иногда в тестах 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='[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;
}
}