Salesforce внедряет класс Apex в производство с покрытием кода 0% - PullRequest
0 голосов
/ 17 мая 2019

Я использую Salesforce и хочу развернуть собственный класс Apex из моей песочницы. В производстве отсутствуют классы Apex, и примерный охват кода составляет 0%, поэтому при попытке развернуть мой класс я получаю следующую ошибку

enter image description here

Есть ли способ развернуть мой класс?

Класс, который я хочу развернуть, находится здесь:

Public class AutoConvertLeads
{
    @InvocableMethod
    public static void LeadAssign(List<Id> LeadIds)
    {

        List<Database.LeadConvert> MassLeadconvert = new List<Database.LeadConvert>();
        for(id currentlead: LeadIds){
                Database.LeadConvert Leadconvert = new Database.LeadConvert();
                Leadconvert.setLeadId(currentlead);                
                Leadconvert.setConvertedStatus('Qualified');
                MassLeadconvert.add(Leadconvert);
        }


        if (!MassLeadconvert.isEmpty()) {
            List<Database.LeadConvertResult> lcr = Database.convertLead(MassLeadconvert);
        }
    }
}

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

@isTest
Private class UnitTest_AutoConvert 
{
    Static TestMethod void AutoConvert()
    {
        // Create the Lead object
        Lead testLead = new Lead(
            FirstName='Demo 100800',
            LastName = 'Demo 100800 UnitTest',
            Status='Qualified',
            company='Lacosta'
        );
        insert  testLead;

        test.StartTest();
        List<Lead> lstOfLeadids = [ testLead.Id ]
        AutoConvertLeads.LeadAssign(lstOfLeadIds)

        test.stopTest();
    }
}

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Чтобы соответствовать требованиям развертывания производства, вы должны соответствовать требованиям тестирования. На базовом уровне это означает, что вы должны поддерживать 75% покрытия строк между вашим рабочим кодом и вашими тестовыми классами. Это на совокупном уровне - поэтому вы можете иметь некоторые классы Apex с большей или меньшей степенью покрытия, но они должны составлять 75% всего кода. Кроме того, для всех триггеров Apex требуется как минимум 1 линия покрытия тестами, чтобы пройти тестирование.

К сожалению, вы предоставили ограниченную информацию в своем вопросе. Было бы полезно, если бы вы могли предоставить код для вашего тестового класса, чтобы мы могли определить, почему Salesforce не выполняет ваши тесты во время развертывания. Я предполагаю, что вы неправильно оформили свой тестовый класс для Salesforce, чтобы знал , что это тестовый класс.

Если вы хотите дружеское введение в тестирование, попробуйте Trailhead для тестирования: https://trailhead.salesforce.com/en/content/learn/modules/apex_testing

Посмотрите документацию, рекомендованную Сватоплуком. В частности, убедитесь, что происходит следующее:

1) Тестовый класс помечен как "@isTest"

2) Метод test в классе помечается как "@isTest" или "testMethod" в объявлении.

3) Тестовый класс фактически создает и выполняет код внутри целевого класса.

4) Разверните TargetClass и TestClass в одном наборе изменений - это так, чтобы Salesforce действительно могла выполнять тесты во время развертывания.

Вот пример блока:

@isTest
public class TestTargetClass{

    public static testMethod void TestExectuableMethod() {     
        Test.startTest();
        TargetClass instance_tc = new TargetClass();
        instance_tc.executable_method();
        Test.stopTest();
        System.assert(<some sort of test to confirm that your TargetClass operates correctly>);
    }
}

РЕДАКТИРОВАТЬ НА ОСНОВЕ ПОЛОЖЕННОГО КОДА ИСПЫТАНИЯ:

Ваш тестовый код имеет ряд проблем. Во-первых, он не компилируется, поэтому я не уверен, как вы смогли пройти пройденный тест.

Давайте рассмотрим ошибки в следующем блоке:

    test.StartTest();
    List<Lead> lstOfLeadids = [ testLead.Id ]
    AutoConvertLeads.LeadAssign(lstOfLeadIds)
    test.stopTest();

Вторая строка lstOfLeadids относится к списку типов отведений, но вы пытаетесь заполнить ее идентификатором, а не отведением. Это должен быть список идентификаторов, поскольку AutoConvertLeads.LeadAssign принимает список идентификаторов в качестве параметра.

Ваш экземпляр lstOfLeadids также неверен.

Вам не хватает двух точек с запятой.

Пожалуйста, используйте следующий код:

    test.StartTest();
    List<Id> lstOfLeadids = new List<Id>{ testLead.Id };
    AutoConvertLeads.LeadAssign(lstOfLeadIds);
    test.stopTest();

В вашем текущем классе AutoConvertLeads вы устанавливаете статус конвекции лидов в "Квалифицированный". Это не сработало на моей Песочнице, но, возможно, на твоей. Вы должны запросить MasterLabel для объекта LeadStatus записи IsConverted, чтобы получить правильное значение.

1 голос
/ 17 мая 2019

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

Вы можете найти базовое объяснение здесь

...