Я создал триггер, который при нажатии кнопки «Синхронизировать предложение» будет обновлять продукты возможностей с помощью настраиваемых полей, которые наша организация должна поместить в систему учета.

trigger UpdateOpportunityProductsFromOpportunity on Opportunity (after update) {
List<Quote> quoteList = new List<Quote>();
String primaryQuote = '';

for(Opportunity o : Trigger.new){
    primaryQuote = ( o.SyncedQuoteId==null ? '' : o.SyncedQuoteId );

    quoteList = [ Select Id From Quote Where OpportunityId = :o.Id ];

    for(Quote q : quoteList){q.IsPrimary__c = false;update q;}


    if(primaryQuote.length()==18){
        quoteList = [ Select Id From Quote Where Id = :primaryQuote ];

        for(Quote q : quoteList){q.IsPrimary__c = true; update q;}


    }
}

Это 1 из 2 триггеров, которые мне нужно развернуть.

Поскольку покрытие кода нашей организации не составляет 75 %, мне нужно довести его до точки покрытия кода для развертывания.

Я создал этот тестовый класс

@isTest
private class UpdateOPFromOpportunityTest{

  static testmethod void primaryQuote
    {
        // Obtain Apex governor limits and resources for this test
        Test.startTest();

        for(Opportunity o : Trigger.new){primaryQuote = ( o.SyncedQuoteId=='0Q01M0000014FzASAU' ? '' : o.SyncedQuoteId );

        quoteList = [ Select Id From Quote Where OpportunityId = '0061M00000xVYh2QAG'];

        for(Quote q : quoteList){q.IsPrimary__c = false;update q;}



        // Release governor limits and resources
        Test.stopTest();
    }

Две строки с ошибками, которые я получаю сегодня утром, озадачивают меня

В строке 7 ошибка

Неожиданный токен и недопустимый конструктор для Test.startTest

Одна строка 9 получила

Ожидание } получил для

0
David Reed 18 Июл 2019 в 17:07

1 ответ

В объявлении метода отсутствуют пустые скобки:

  static testmethod void primaryQuote

Такая синтаксическая ошибка часто приводит к неожиданным ошибкам непосредственно под ней.

Также обратите внимание, что ключевое слово @isTest заменило testmethod и должно использоваться в новом коде.

Ваш модульный тест по-прежнему не будет работать, потому что он жестко кодирует идентификаторы, которые он не может видеть в контексте модульного теста, где применяется изоляция данных, и потому что он ссылается на Trigger.new, к которым вы не можете получить доступ вне триггера. Это не приведет к выполнению триггера в тестовом контексте, поскольку он не выполняет DML для Opportunity и, следовательно, не охватывает код.

Ваш модульный тест должен генерировать 100% данных, которые ему требуются в коде. Он должен синтезировать эти данные и выполнять операции DML, чтобы заставить ваш триггер выполняться, выполнять его логику, а затем делать утверждения для проверки результатов. См. Как написать модульный тест Apex? для получения дополнительной информации и ссылок на ресурсы.

0
David Reed 18 Июл 2019 в 17:10