Salesforce Beginner-控制器扩展的测试类

问题描述

我是编码新手,正在使用Salesforce。 我需要帮助来了解如何为控制器扩展创建测试类。 建立测试类时,我会抓紧时间,现在代码覆盖率达到66%。我们非常感谢您对以下代码的调整,对我的理解也将大有帮助。 Visualforce页面非常简单:

<apex:page standardController="Case" 
    extensions="Case_ListOppSplits_Controller" lightningStylesheets="true">
<apex:pageBlock >
    <apex:pageBlockTable value="{!Opportunity_Splits}" var="oppSplit">
        <apex:column value="{!oppSplit.Name}"/>
        <apex:column value="{!oppSplit.Split_Loan_Amount__c}"/>
        <apex:column value="{!oppSplit.Loan_Usage__c}"/>
        <apex:column value="{!oppSplit.Loan_Purpose__c}"/>
        <apex:column value="{!oppSplit.Rate_Type__c}"/>
        <apex:column value="{!oppSplit.Repayment_Type__c}"/>
    </apex:pageBlockTable>
</apex:pageBlock>
</apex:page>`

控制器扩展名是:

public class Case_ListOppSplits_Controller {
    public Case myCase;

    public Case_ListOppSplits_Controller(ApexPages.StandardController stdController){
        this.myCase = (Case)stdController.getRecord();

    }
    public list<Opportunity_Split__c> getopportunity_Splits(){
        Case currentCase = [SELECT Id,Subject,Opportunity__c FROM Case WHERE Id =: ApexPages.currentPage().getParameters().get('id')];
        List<Opportunity_Split__c> OppSplits = [SELECT Id,Name,Opportunity__c,Loan_Purpose__c,Loan_Type__c,Loan_Usage__c,Rate_Type__c,Repayment_Type__c,Split_Loan_Amount__c FROM Opportunity_Split__c WHERE Opportunity__c =: currentCase.Opportunity__c];
    return OppSplits;
    }   
}

测试类:

@isTest
public class Case_ListOppSplits_Controller_Test {
    static testMethod void testMethod1() 
    {
        Case testCase = new Case();
        testCase.Subject='Test Case';
        testCase.Opportunity__c='0067F00000N8vSVQAZ';
        testCase.recordtypeId='0126D000000qSBcQAM'; //UA
        testCase.Status='Assigned';
        insert testCase;

        Test.Starttest(); 
    
        PageReference pageRef = new PageReference('https://omniwealth--dwr.my.salesforce.com/apex/Case_OpportunitySplits?id='+testCase.Id); 
    
        ApexPages.StandardController sc = new ApexPages.StandardController(testCase);
        Case_ListOppSplits_Controller extn = new Case_ListOppSplits_Controller(sc);
        List<Opportunity_Split__c> listOppSplits = extn.getopportunity_Splits(); 
    
        Test.Stoptest();
    }
}

解决方法

您似乎在尝试利用现有数据(不应该这样做)而不添加@ seeAlldata = true。您应该做的是在调用控制器方法之前,先在测试代码中创造机会和机会。

另一方面,您的控制器中有myCase记录,因此在getOpportunitySplits中的查询可以利用它代替page参数。 (如果Id =:myCase.Id)。

创建机会并拆分或设置seealldata后,应增加覆盖率。如果您决定使用seeAllData,请注意,由于机会ID值可能不匹配,因此在尝试部署到生产环境时测试将失败。