2017-07-18 54 views
0

长时间SFDC管理员首次潜入APEX。使用AggregateResults函数为Salesforce自定义控制器编写单元测试

我为仪表板组件(visualforce页面)构建了一个自定义控制器。控制器的工作原理,但需要单元测试推动生产(不要问 - 组织覆盖率低)。

这里是控制器:

public with sharing class retrieveMRR { 

public Summary[] Summaries { get; set; } 

public retrieveMRR() { 
    AggregateResult[] results = 
     [SELECT SUM(Opportunity.MRR_Projected_EOM__c) MRRtm, 
SUM(Opportunity.Billing_MRR_Last_Month__c) MRRlm, 
SUM(Opportunity.Billing_MRR_M_minus2__c) MRRlm2, 
SUM(Opportunity.Billing_MRR_Last_Month_Pilot_Change__c) chgPlusPilotlm , 
SUM(Opportunity.Billing_MRR_Last_Month_Pilot_Change2__c) chgMinusPilotlm , 
SUM(Opportunity.Billing_MRR_Last_Month_NPilot_Change__c) chgPlusNPilotlm , 
SUM(Opportunity.Billing_MRR_Last_Month_NPilot_Change2__c) chgMinusNPilotlm FROM Opportunity ]; 
    Summaries = new List<Summary>(); 
    for (AggregateResult ar : results) { 
    Summaries.add(new Summary(ar)); 


} 

} 
public class Summary { 
    public Decimal MRRtm { get; private set; } 
    public Decimal MRRlm { get; private set; } 
    public Decimal MRRlm2 { get; private set; } 
    public Decimal chgPlusPilotlm { get; private set; } 
    public Decimal chgMinusPilotlm { get; private set; } 
    public Decimal chgPlusNPilotlm { get; private set; } 
    public Decimal chgMinusNPilotlm { get; private set; } 

    public Summary(AggregateResult ar) { 
    MRRtm = (Decimal) ar.get('MRRtm'); 
    MRRlm = (Decimal) ar.get('MRRlm'); 
    MRRlm2 = (Decimal) ar.get('MRRlm2'); 
    chgPlusPilotlm = (Decimal) ar.get('chgPlusPilotlm'); 
    chgMinusPilotlm = (Decimal) ar.get('chgMinusPilotlm'); 
    chgPlusNPilotlm = (Decimal) ar.get('chgPlusNPilotlm'); 
    chgMinusNPilotlm = (Decimal) ar.get('chgMinusNPilotlm'); 

    } 
    } 
} 

这是必要的Visualforce页面,如果

<apex:page controller="retrieveMRR"> 
<apex:pageBlock title="MRR"> 
    <apex:pageBlockSection columns="3" > 
    <apex:repeat value="{!Summaries}" var="summary"> 

    <apex:outputText style="font-weight:800; font-size:16px" value="Month"></apex:outputText> 
    <apex:outputText style="font-weight:800; font-size:16px" value="Value"></apex:outputText> 
    <apex:outputText style="font-weight:800; font-size:16px" value="+ New/- Lost"></apex:outputText> 


    <apex:outputText style="font-weight:800" value="{0,date,MMMM YYYY} (actual)"><apex:param value="{!TODAY()-60}" /> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.MRRlm2}" /></apex:outputText> </apex:outputLink> 
    <apex:outputText value=""></apex:outputText> 

    <apex:outputText style="font-style:italic" value=" change"><apex:param value="{!TODAY()}" /> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.MRRlm-summary.MRRlm2}" /></apex:outputText> </apex:outputLink> 
    <apex:outputText value="{0, number, currency}"><apex:param value="{!null}" /></apex:outputText> 

    <apex:outputText style="font-weight:400 ; align: center" value="Pilot"> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.chgPlusPilotlm+summary.chgMinusPilotlm}" /></apex:outputText></apex:outputLink> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="+{0, number, $###,###,##0}/{1, number, $###,###,##0}"> 
    <apex:param value="{!summary.chgPlusPilotlm}" /> 
    <apex:param value="{!summary.chgMinusPilotlm}" /> </apex:outputText></apex:outputLink> 

    <apex:outputText style="font-weight:400 ; align: center" value="Non-Pilot"> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.chgPlusNPilotlm+summary.chgMinusNPilotlm}" /></apex:outputText></apex:outputLink> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="+{0, number, $###,###,##0}/{1, number, $###,###,##0}"> 
    <apex:param value="{!summary.chgPlusNPilotlm}" /> 
    <apex:param value="{!summary.chgMinusNPilotlm}" /> </apex:outputText></apex:outputLink> 


    <apex:outputText style="font-weight:800" value="{0,date,MMMM YYYY} (actual)"><apex:param value="{!TODAY()-31}" /> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.MRRlm}" /></apex:outputText> </apex:outputLink> 
    <apex:outputText value="{0, number, currency}"><apex:param value="{!null}" /></apex:outputText> 

    <apex:outputText style="font-style:italic" value="change"></apex:outputText> 
    <apex:outputText value="{0, number, currency}"><apex:param value="{!summary.MRRtm-summary.MRRlm}" /></apex:outputText> 
    <apex:outputText value="{0, number, currency}"><apex:param value="{!null}" /></apex:outputText> 

    <apex:outputText style="font-weight:800" value="{0,date,MMMM YYYY} (projected)"><apex:param value="{!TODAY()}" /> </apex:outputText> 
    <apex:outputLink target="_parent" value=""><apex:outputText value="{0, number, currency}"><apex:param value="{!summary.MRRtm}" /></apex:outputText> </apex:outputLink> 
    <apex:outputText value="{0, number, currency}"><apex:param value="{!null}" /></apex:outputText> 



    </apex:repeat> 
    </apex:pageBlockSection> 
</apex:pageBlock> 

我做单元测试等APEX控制器,但我不知道如何测试一个只是聚合函数的控制器。帮助将不胜感激!

回答

0

我做了很多谷歌搜索和反省摸不着头脑的。

我一直在寻找的解决方案是合适的:我不是在这个类中写数据。我不需要数据工厂和疯狂的设备来测试它。将示例应用到一个只查询数据库然后打印值的简单类中是非常困难的。

因此,我写的测试简单,对于我而言的作品(满足代码覆盖范围):

@isTest 
 
public class badtest { 
 
    static testMethod void runTest() { 
 
     retrieveMRR a = new retrieveMRR(); 
 
      
 
    } 
 
    }

我只是创建一个类,然后实例化的类我试图测试。 BAM 100%代码覆盖率。

希望这可以帮助那些学习APEX,以便为仪表板构建Visualforce页面。

0

使用测试类作为数据工厂(请参阅trailhead HERE)为该帐户创建帐户和机会(例如createTestAccount和createTestOpportunity类)。

然后创建一个测试类控制器类的实例,并做一些断言(见HERE一个很好的例子)

相关问题