gpt4 book ai didi

salesforce - Apex为什么标准 Controller 在创建 Controller 时不设置当前页面(单元测试)

转载 作者:行者123 更新时间:2023-12-02 07:32:36 24 4
gpt4 key购买 nike

在 Apex 单元测试中,为什么 MyConrtoller myCont = new MyController(StandardContoller); 不这样做?调用设置当前页面?

例如,如果我有这个页面:

<apex:page standardController="DB_Object__c" extensions="MyExtension">
<apex:form id="detail_list">
<apex:detail />
<apex:actionStatus id="readStatus">
<apex:facet name="start">
Loading, please wait...
</apex:facet>
<apex:facet name="stop"><apex:outputPanel >
<apex:commandButton action="{!readData}"
value="Update Data"
rerender="detail_list"
status="readStatus"/>
{!remainingRecords}</apex:outputPanel>
</apex:facet>
</apex:actionStatus>
</apex:form>
</apex:page>

如果我的单元测试创​​建了这个:

DB_Object__c dbObj = new DB_Object__c();
dbObj.Name = 'test';
dbObj.Setting = 'aSetting';
insert dbObj;
Test.setCurrentPageReference(Page.Demo);
ApexPages.StandardController sc = new ApexPages.StandardController(dbObj);
MyExtension myExt = new MyExtension(sc);

为什么 ApexPages.currentPage().getParameters().get('id'); 失败?我要做的是:

ApexPages.currentPage().getParameters().put('id',dbObj.id);

如果 dbObj 不做任何事情,那么将 dbObj 传递给 StandardController 有何意义?您发送的意图是空白对象并且扩展使用该对象吗?似乎没有很多关于标准 Controller 和单元测试的文档...

谢谢!

最佳答案

在测试场景中解决这个问题的一种方法是这样的:

// at first you have to create the object
DB_Object__c dbObj = new DB_Object__c();
dbObj.Name = 'test';
dbObj.Setting = 'aSetting';
insert dbObj;

// then you'd call the vf page with the id query paramter
Test.setCurrentPageReference(Page.Demo);
ApexPages.currentPage().getParameters().put('id', dbObj.Id);
dbObj = [Select All, Fields, You, Need From DB_Object__c Where Id = :ApexPages.currentPage().getParamters().get('id')];

// then the StandardController & controller extension get initiated
ApexPages.StandardController sc = new ApexPages.StandardController(dbObj);
MyExtension myExt = new MyExtension(sc);

现在回答你的问题,为什么 getParameters().get('id') 失败?您可以启动一个没有记录 ID 的 StandardController,如果您使用默认的 save PageReference,这将为您提供一条新记录并自动插入该记录。

关于salesforce - Apex为什么标准 Controller 在创建 Controller 时不设置当前页面(单元测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com