Salesforce :Устранение ограничений регулятора в тестовых классах по всем направлениям

Я не смог получить какую-либо достоверную информацию об этой проблеме в Интернете. Но я думаю, что это должна быть проблема, которая должна затрагивать многих людей.

По сути, я написал простой триггер и тестовый класс в песочнице, протестировал его и, когда все было в порядке, развернул его в PRD.

Сначала я попробовал режим проверки и получил эту ошибку.

System.LimitException :Слишком много запросов SOQL :101

Было показано, что эта ошибка возникает в каком-то другом тестовом классе. Итак, я чувствую, что тестовые случаи в моем триггере выполнялись, и это в сочетании с оставшимися тестовыми примерами каким-то образом превысило предел.

Таким образом, общее количество запросов SOQL в наших модульных тестах должно быть меньше 100. Это немного сложно соблюдать, верно? Я могу себе представить, что с таким количеством тестовых случаев нам наверняка понадобится более 100 запросов.

Так как же избежать превышения этого предела, поскольку Salesforce выполняет все тестовые случаи при развертывании даже одной строки кода.

У меня нет обычных подозреваемых... таких как SOQL в цикле for.

ОБНОВЛЕНИЕ :19.08.2012 :Сейчас выкладываю исходный код тестового класса и триггера

Тестовый класс:

@isTest

частный класс TestAccountDuplicateWebsiteTrigger {

static testMethod void myUnitTest() {
    try{
    // TO DO: implement unit test
    Test.startTest();
    Account a1;      
    a1 = new Account();
    a1.name = 'GMSTest';    
    a1.Website = 'www.test.com';            



    Account a2;      
    a2 = new Account();
    a2.name = 'GMSTest2';   
    a2.Website = 'www.test.com';            


    Account a3;      
    a3 = new Account();
    a3.name = 'GMSTest3';   
    a3.Website = 'www.test1.com';           


    insert a1;
    insert a2;
    //insert a3;
    Test.stopTest(); 


    }
    catch (Exception e)
    {
    }

}

}

Триггер

trigger osv_unique_website_for_account on Account (before insert, before update) {  

    //Map which has no duplicates with website as the key
    Map<String, Account> accountMap = new Map<String, Account>();

    for (Account account: System.Trigger.new)
    {
        //Ensure that during an update, if an website does not change - it should not be treated as a duplicate
        if ((account.Website != null) && (System.Trigger.isInsert ||            
            (account.Website != System.Trigger.oldMap.get(account.Id).Website))) 
            {
                //check for duplicates among the new accounts in case of a batch
                 if (accountMap.containsKey(account.Website)) 
                 {
                    account.Website.addError('Cannot save account. Website already exists.');
                 } 
                 else 
                 {
                    accountMap.put(account.Website, account);
                 }

            }       
    }

    //Now map containing new account websites has been created. 
    //Check them against the account websites that ALREADY EXIST in salesforce. If website exists, display error.
    for (Account account : [SELECT Website FROM Account WHERE Website IN :accountMap.KeySet()]) 
    {
        Account newAccount = accountMap.get(Account.Website);
        if (newAccount!=null)
        {
            newAccount.Website.addError('Cannot save account. Website already exists.');
        }
    }   

}

Не могли бы вы поделиться своими мыслями?

Спасибо,

Кальвин

5
задан Richard N 19 August 2012 в 23:54
поделиться