Я тестирую свой класс и его 50% в классе обработчика триггеров, что я могу сделать, чтобы покрыть строки красным кодом;

Мой класс:

public class AccountTriggerHandler
{
    public static void updateContactAddresses(Map<ID, Account> updatedAccounts, Map<ID, Account> oldAccounts)
    {
        Set<Id> accountIds = new Set<Id>();
        for (Account a : updatedAccounts.values()){ 
            if(oldAccounts !=null) {
                //this is the red highlight
              /*  Account old = oldAccounts.get(a.Id); 
                if (a.billingstreet != old.billingstreet|| a.billingcity !=old.billingcity || a.billingstate !=old.billingstate || a.billingcountry != old.billingcountry) { 
                    accountIds.add(a.Id); */
                }
            } 
            else{
               accountIds.add(a.Id); 
            }
        }
        if (accountIds.size() > 0) {
            Contact[] updateAddress = [SELECT Id, accountId FROM contact WHERE accountId IN :accountIds];
            for (contact c : updateAddress) {
                 //red highlights
              /*  account a = updatedAccounts.get(c.accountId);
                c.mailingStreet = a.billingStreet;
                c.mailingcity = a.billingcity;
                c.mailingstate = a.billingstate;
                c.mailingpostalcode = a.billingpostalcode;
                c.mailingcountry = a.billingcountry;
               */
                }
            update updateAddress;
         }
    }
}

Мой триггер равен 100 %;

trigger contactFromAccounts on Account (after insert, after update) {
    AccountTriggerHandler.updateContactAddresses(Trigger.NewMap, Trigger.OldMap);      
}

Это мой тестовый класс:

@isTest
private class ContactAddressChange {
    static testmethod void testAddressChange() {
        //create Account
        Account sAcct = new Account();
        sAcct.Name = 'Test Account 1';
        //create address
        sAcct.BillingStreet = '11 Initial Street';
        sAcct.BillingCity = 'Rochester';
        sAcct.BillingPostalCode = '12456';
        sAcct.BillingState = 'NY';
        sAcct.BillingCountry = 'USA';
        insert sAcct;
        Test.stopTest();

        //create contact for Account "Test Account 1"
        Contact sContact1 = new Contact();
         //create contact address
        sContact1.MailingStreet = '1 Initial street';
        sContact1.MailingCity = 'Rochester';
        sContact1.MailingPostalCode = '12456';
        sContact1.MailingState = 'NY';
        sContact1.MailingCountry = 'USA';
        // sContact1.account.id = sAcct.id;
        sAcct.id = sContact1.account.id;

        Contact sContact2 = new Contact();
        sContact2.MailingStreet = '2 Initial street';
        sContact2.MailingCity = 'Rochester';
        sContact2.MailingPostalCode = '12456';
        sContact2.MailingState = 'NY';
        sContact2.MailingCountry = 'USA';
        //sContact2.account.id = sAcct.id;
        sAcct.id = sContact2.account.id;

        Contact sContact3 = new Contact();
        sContact3.MailingStreet = '3 Initial street';
        sContact3.MailingCity = 'Rochester';
        sContact3.MailingPostalCode = '12456';
        sContact3.MailingState = 'NY';
        sContact3.MailingCountry = 'USA';
        //sContact3.account.id = sAcct.id;
        sAcct.id = sContact3.account.id;

        //change address on account
        sAcct.BillingStreet = '11 Updated Street'; 
        sAcct.BillingCity = 'Updated City';
        sAcct.BillingPostalCode = '99999';
        sAcct.BillingState = 'PA';
        sAcct.BillingCountry = 'Mexico';

        Test.startTest();
         update sAcct;//this should fire my trigger.
        Test.stopTest();

        //check if account updated address match each contact address
        System.assertEquals(sAcct.BillingStreet, sContact1.mailingstreet); 
        System.assertEquals(sAcct.BillingCity, sContact1.MailingCity); 
        System.assertEquals(sAcct.BillingPostalCode, sContact1.MailingPostalCode); 
        System.assertEquals(sAcct.BillingState, sContact1.MailingState);
        System.assertEquals(sAcct.BillingCountry, sContact1.MailingCountry);

        System.assertEquals(sAcct.BillingStreet, sContact2.mailingstreet); 
        System.assertEquals(sAcct.BillingCity, sContact2.MailingCity); 
        System.assertEquals(sAcct.BillingPostalCode, sContact2.MailingPostalCode); 
        System.assertEquals(sAcct.BillingState, sContact2.MailingState);
        System.assertEquals(sAcct.BillingCountry, sContact2.MailingCountry);

        System.assertEquals(sAcct.BillingStreet, sContact3.mailingstreet); 
        System.assertEquals(sAcct.BillingCity, sContact3.MailingCity); 
        System.assertEquals(sAcct.BillingPostalCode, sContact3.MailingPostalCode); 
        System.assertEquals(sAcct.BillingState, sContact3.MailingState);
        System.assertEquals(sAcct.BillingCountry, sContact3.MailingCountry);
    }
}
0
Reshma 9 Янв 2019 в 14:06
Ваш класс AccountTriggerHandler не будет компилироваться.
 – 
Reshma
9 Янв 2019 в 11:46
Что значит не компилируется?
 – 
user63498
9 Янв 2019 в 11:55
Вы не прокомментировали одну закрывающую скобку }
 – 
Reshma
9 Янв 2019 в 11:56
Я просто комментирую это здесь, чтобы указать, что строки выделены красным цветом.
 – 
user63498
9 Янв 2019 в 12:01
Также ознакомьтесь с эти ресурсы.
 – 
David Reed
9 Янв 2019 в 16:50

1 ответ

Лучший ответ

Я вижу много проблем с вашим кодом и тестовым классом.

  1. Вы не прокомментировали закрывающую скобку } в строке 12.
  2. В тестовом классе несколько Test.stopTest()
  3. Вы не обновили поле AccountId контакта, поэтому оно не будет покрывать 50% вашего кода. Контакт не вставлен в базу данных.
  4. Вы получите сообщение об ошибке обязательного поля для контакта, так как Lastname не было заполнено.
  5. Будет исключение обновления для учетной записи, поскольку Id не было указано.

Обновите свой тестовый класс кодом ниже и добавьте утверждение.

@isTest
private class ContactAddressChange {
    static testmethod void testAddressChange() {
        Test.startTest();
        //create Account
        Account sAcct = new Account();
        sAcct.Name = 'Test Account 1';
        //create address
        sAcct.BillingStreet = '11 Initial Street';
        sAcct.BillingCity = 'Rochester';
        sAcct.BillingPostalCode = '12456';
        sAcct.BillingState = 'NY';
        sAcct.BillingCountry = 'USA';
        insert sAcct;

        //create contact for Account "Test Account 1"
        Contact sContact1 = new Contact();
        //create contact address
        sContact1.Lastname = 'sContact1';
        sContact1.MailingStreet = '1 Initial street';
        sContact1.MailingCity = 'Rochester';
        sContact1.MailingPostalCode = '12456';
        sContact1.MailingState = 'NY';
        sContact1.MailingCountry = 'USA';
        sContact1.Accountid = sAcct.id;

        Contact sContact2 = new Contact();
        sContact2.Lastname = 'sContact2';
        sContact2.MailingStreet = '2 Initial street';
        sContact2.MailingCity = 'Rochester';
        sContact2.MailingPostalCode = '12456';
        sContact2.MailingState = 'NY';
        sContact2.MailingCountry = 'USA';
        sContact2.Accountid = sAcct.id;

        Contact sContact3 = new Contact();
        sContact3.Lastname = 'sContact3';
        sContact3.MailingStreet = '3 Initial street';
        sContact3.MailingCity = 'Rochester';
        sContact3.MailingPostalCode = '12456';
        sContact3.MailingState = 'NY';
        sContact3.MailingCountry = 'USA';
        sContact3.Accountid = sAcct.id;

        List<Contact> contacts = new List<Contact>{sContact1, sContact2, sContact3};
        Insert contacts;

        //change address on account
        sAcct.BillingStreet = '11 Updated Street'; 
        sAcct.BillingCity = 'Updated City';
        sAcct.BillingPostalCode = '99999';
        sAcct.BillingState = 'PA';
        sAcct.BillingCountry = 'Mexico';

        update sAcct;//this should fire my trigger.
        Test.stopTest();

        //Add valid assertion for unit test
    }
}
1
Reshma 9 Янв 2019 в 12:04
Привет @Reshma, ты можешь помочь мне с моим проектом visualforce? У меня есть сообщение, и мне нужна помощь. Я очень ценю, если вы мне поможете .. Большое спасибо.
 – 
user63498
15 Янв 2019 в 11:37