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

Контроллер

public class PrnlDueCon {

    public ApexPages.StandardSetController setCon {
        get {
            if(setCon == null) {
                setCon = new ApexPages.StandardSetController(Database.getQueryLocator(
                    [SELECT Name, Policy_Type__c, StageName, closeDate, KBI_DivisionOPP__c, Income__c  FROM Opportunity 
                     WHERE (closeDate <= NEXT_90_DAYS) AND (StageName = 'Pre-Renewal To Be Sent')
                     AND (Type = 'Existing Customer - Renewal')]));
            }
            return setCon;
        }
        set;
    }

    public List<Opportunity> getOpportunities() {
        List<User> UserListDiv = [SELECT Division FROM User WHERE Id = :UserInfo.getUserId() LIMIT 1];
        string UserDiv = string.valueOf(UserListDiv[0].Division);
        List<Opportunity> OppsToDisplay = new List<Opportunity>();

        List<Opportunity> AllRenewals = setCon.getRecords();

        For (Opportunity Rnl : AllRenewals) {
            if(Rnl.KBI_DivisionOPP__c == UserDiv) {
                OppsToDisplay.add(Rnl);
            }                
        }
    return OppsToDisplay;          
    }       
}

Страница VF

<apex:page controller="PrnlDueCon" lightningStyleSheets="true">
    <apex:pageBlock >
        <apex:pageBlockTable value="{!opportunities}" var="o">
            <apex:column headerValue="NAME">
                <apex:outputlink value="/{!o.Id}">{!o.Name}</apex:outputlink>
            </apex:column>
            <apex:column value="{!o.Income__c}"/>            
            <apex:column value="{!o.CloseDate}"/>
        </apex:pageBlockTable>
    </apex:pageBlock>   
</apex:page>

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

@isTest
public class PrnlDueConTEST {
    public static testMethod void createAccAndOpp() {

        Test.startTest();

        // Create Role

        UserRole r = new UserRole(DeveloperName = 'MyCustomRole', Name = 'My Role');
        insert r;


        // Create User

        User newUser = new User();

        newUser.ProfileId = [SELECT Id FROM Profile WHERE Name = 'System Administrator'].id;
        newUser.LastName = 'test';
        newUSer.Email = 'test@test.com';     
        newUser.Username = 'test@test.com' + system.currentTimeMillis();
        newUser.CompanyName = 'TESTCO';
        newUSer.Title = 'Title';        
        newUser.Alias = 'alias';
        newUser.TimeZoneSidKey = 'America/Los_Angeles';
        newUSer.EmailEncodingKey = 'UTF-8';
        newUSer.LanguageLocaleKey = 'en_US';
        newUSer.LocaleSidKey = 'en_US';
        newUSer.UserRoleId = r.id;
        newUser.Division = 'Complex';

        insert newUser;


        // Create account

        system.runAs(newUser) {

            Id accRecordId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Client').getRecordTypeId();

            Account newAcc = new Account();

            newAcc.Name = 'test account';
            newAcc.KBI_Area__c = 'Complex';
            newAcc.RecordTypeId = accRecordId;
            newAcc.Account_Origin__c = 'Client Referral';

            insert newAcc;

            Id oppRecordId = Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('Renewal').getRecordTypeId();


            // Create Opportunity

            List<Opportunity> OppList = new List<Opportunity>();

            Opportunity newOpp = new Opportunity();

            newOpp.Name                         = 'Test Name Opp';
            newOpp.KBI_DivisionOPP__c           = 'Complex';
            newOpp.AccountID                    = newAcc.id;
            newOpp.RecordTypeId                 = oppRecordId;
            newOpp.Income__c                    = 1;
            newOpp.Type                         = 'Existing Customer - Renewal';
            newOpp.StageName                    = 'Pre-Renewal To Be Sent';
            newOpp.Policy_Type__c               = 'Boat';
            newOpp.CloseDate                    = date.today() + 10;

            OppList.add(newOpp);

            insert OppList;

            PageReference ref = Page.PrnlDueVFP;                       

            PrnlDueCon TestPrnlTestCon = new PrnlDueCon();

            test.stopTest();       
        }              
    }
}
0
Daniel 7 Янв 2019 в 05:48
Ваш модульный тест не вызывает ваш контроллер, сохраните его конструктор. По сути, тестирование контроллера Visualforce мало чем отличается от тестирования другого кода Apex — вы должны вызывать каждый путь кода в контексте тестирования, чтобы проверить его поведение и получить побочный эффект покрытия кода.
 – 
David Reed
7 Янв 2019 в 05:57
Блестяще, спасибо Дэвид. Я добавил TestPrnlTestCon.getOpportunities(); и теперь достигают 100% покрытия кода
 – 
Daniel
7 Янв 2019 в 06:34

1 ответ