Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用AggregateResults函数为Salesforce自定义控制器编写单元测试_Unit Testing_Salesforce_Aggregate Functions_Apex - Fatal编程技术网

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

Unit testing 使用AggregateResults函数为Salesforce自定义控制器编写单元测试,unit-testing,salesforce,aggregate-functions,apex,Unit Testing,Salesforce,Aggregate Functions,Apex,长期担任SFDC管理员,第一次跳入APEX 我为仪表板组件(visualforce页面)构建了一个自定义控制器。控制器可以工作,但需要单元测试才能投入生产(Don-ask-org的覆盖率很低) 这是控制器: public with sharing class retrieveMRR { public Summary[] Summaries { get; set; } public retrieveMRR() { AggregateResult[] results =

长期担任SFDC管理员,第一次跳入APEX

我为仪表板组件(visualforce页面)构建了一个自定义控制器。控制器可以工作,但需要单元测试才能投入生产(Don-ask-org的覆盖率很低)

这是控制器:

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');

    }
  } 
 }
public与共享类retrieveMRR{
公共摘要[]摘要{get;set;}
公共检索mrr(){
AggregateResult[]结果=
[选择总和(Opportunity.MRR\u Projected\u EOM\u c)MRRtm,
金额(机会、账单、上个月、上个月),
总额(机会、账单金额减去2)MRRlm2,
金额(机会、账单、MRR、上月、试点、变更)chgPlusPilotlm,
金额(机会、账单、上个月、试点、变更2、c),
金额(机会、账单、上个月、试点、变更)chgPlusNPilotlm,
总额(Opportunity.Billing\u MRR\u Last\u Month\u试点变更2\u c)从Opportunity开始的试点费用];
摘要=新列表();
对于(聚合结果:结果){
总结。添加(新总结(ar));
}
}
公开课摘要{
公共十进制MRRtm{get;private set;}
公共十进制MRRlm{get;private set;}
公共十进制MRRlm2{get;private set;}
公共十进制chgPlusPilotlm{get;private set;}
公共十进制chgMinusPilotlm{get;private set;}
公共十进制chgPlusNPilotlm{get;private set;}
公共十进制chgminusnpillotlm{get;private set;}
公开摘要(聚合结果ar){
MRRtm=(十进制)ar.get('MRRtm');
MRRlm=(十进制)ar.get('MRRlm');
MRRlm2=(十进制)ar.get('MRRlm2');
chgPlusPilotlm=(十进制)ar.get('chgPlusPilotlm');
chgMinusPilotlm=(十进制)ar.get('chgMinusPilotlm');
chgPlusNPilotlm=(十进制)ar.get('chgPlusNPilotlm');
chgminusnpilltlm=(十进制)ar.get('chgminusnpilltlm');
}
} 
}
如有必要,这里是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控制器进行了单元测试,但我不知道如何测试一个只是聚合函数的控制器。谢谢你的帮助

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


然后在测试类中创建控制器类的实例,并进行一些断言(请参见一个好的示例)

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

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

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

@isTest
公共类不良测试{
静态测试方法void runTest(){
retrieveMRR a=新的retrieveMRR();
} 
}