首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AggregateResults函数为Salesforce自定义控制器编写单元测试

使用AggregateResults函数为Salesforce自定义控制器编写单元测试
EN

Stack Overflow用户
提问于 2017-07-19 05:29:20
回答 2查看 610关注 0票数 0

长时间的SFDC管理,第一次潜入APEX。

我为一个Dashboard组件(visualforce页面)构建了一个自定义控制器。控制器可以工作,但需要单元测试才能推送到生产环境中(不要问组织的覆盖率太低)。

下面是控制器:

代码语言:javascript
复制
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页面

代码语言:javascript
复制
<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控制器的单元测试,但我不知道如何测试一个仅仅是聚合函数的控制器。如果能帮上忙,我们将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-26 09:03:47

我做了大量的谷歌搜索和自我反省来弄清楚这一点。

我正在寻找的解决方案是权宜之计:我不会在这个类中编写数据。我不需要数据工厂和疯狂的仪器来测试它。将这些示例应用于一个简单的类,即只查询数据库,然后打印值,这真的很难。

因此,我编写的测试很简单,并且可以满足我的目的(满足代码覆盖率限制):

代码语言:javascript
复制
@isTest
public class badtest {
    static testMethod void runTest() {
         retrieveMRR a = new retrieveMRR();
            
  } 
  }

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

希望这对那些学习APEX以便为仪表板构建Visualforce页面的人有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-07-19 21:39:39

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

然后在测试类中创建控制器类的一个实例,并执行一些断言(参见HERE获得一个很好的示例)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45177428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档