Apex-warum nicht die standard-controller-legen Sie die aktuelle Seite beim erstellen der controller (Unit-Test)
In Apex Unit-tests, warum nicht die MyConrtoller myCont = new MyController(StandardContoller); rufen Sie die aktuelle Seite?
Zum Beispiel, wenn ich auf dieser Seite:
<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>
Wenn meine unit-tests erstellt diese:
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);
Warum ApexPages.currentPage().getParameters().get('id');
scheitern? Ich habe zu tun:
ApexPages.currentPage().getParameters().put('id',dbObj.id);
Was ist der Punkt der übergabe in das dbObj
zu StandardController
wenn es nicht irgendwas damit zu tun? Ist die Absicht, die Sie senden, wird ein leeres Objekt und die Erweiterung verwendet dieses Objekt? Es scheint nicht zu sein, eine Menge an Dokumentation für StandardControllers und Unit-Tests...
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Weg zu gehen über diese in einem test-Szenario wäre so etwas wie dieses:
Nun zu deiner Frage, warum
getParameters().get('id')
scheitern? Sie initiieren kann einen StandardController ohne eine Datensatz-id, die Ihnen wäre ein neuer Rekord und einfügen automatisch die Aufzeichnung, wenn Sie den Standard -save
Seitenreferenz.Den anwser zu deiner Frage ist, dass der StandardController hat nichts zu tun mit dem Parameter übergeben, um die visualforce-Seite. Wenn Sie dies verstehen, werden Sie besser verstehen, wie man mit StandardController object-und query-Parameter in Ihren Tests.
Wenn die Seite zugegriffen wird, werfen die browser, die StandardController ist bauen mit dem abrufen der id-Parameter aus der url. Das folgende könnte die Schritte des Gebäudes StandardController und Controller-Erweiterungen auf der Seite.
id=ApexPages.currentPage().getParameters().get('id');
My_Object my_Object=[SELECT Id, Name FROM My_Object WHERE Id = :id]
ApexPages.StandardController sc = new ApexPages.StandardController(my_Object)
MyExtension myExt = new MyExtension(sc)
.Können Sie feststellen, dass instaciating den StandardController-Objekt durch übergabe einer sObject nicht automatisch eine Abfrage erstellen, die parameter mit der id des sObject als argument übergeben wird. Also, wenn Sie für Ihre Testzwecke benötigen Sie den Zugriff auf query-Parameter, müssen Sie es explizit in die Liste der Parameter, wie Sie es getan haben
ApexPages.currentPage().getParameters().put('id', dbObj.Id);
.Ich diese verwendet, um zu identifizieren, wenn die Anfrage kam von einer API-Quelle