2012-08-15 11 views
5

बनाते समय मानक नियंत्रक वर्तमान पृष्ठ सेट क्यों नहीं करता है शीर्ष यूनिट परीक्षणों में MyConrtoller myCont = new MyController (StandardContoller) क्यों नहीं है; कॉल वर्तमान पृष्ठ सेट?शीर्ष मानक नियंत्रक (यूनिट टेस्ट)

उदाहरण के लिए

अगर मैं इस पृष्ठ है:

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'); क्यों असफल है: मेरे इकाई परीक्षण इस बनाता है

<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> 

?

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

StandardController को dbObj में गुजर यह इसके साथ कुछ नहीं करता है, तो की बात क्या है: मैं क्या करना है? क्या आप एक खाली वस्तु में विस्तार करते हैं और extenstion इस वस्तु का उपयोग करता है? मानक नियंत्रक और यूनिट परीक्षण के लिए बहुत सारे प्रलेखन प्रतीत नहीं होते हैं ...

धन्यवाद!

// 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') विफल करता है:

उत्तर

2

एक तरह से एक परीक्षण परिदृश्य में इस बारे में जाने के लिए कुछ इस तरह हो सकता है? आप रिकॉर्ड आईडी के बिना एक मानक नियंत्रक शुरू कर सकते हैं जो आपको एक नया रिकॉर्ड देगा और यदि आप डिफ़ॉल्ट save पृष्ठ संदर्भ का उपयोग करते हैं तो स्वचालित रूप से रिकॉर्ड डालेंगे।

+1

हालांकि यह काम करता है, यह वास्तव में इसे आदर्श नहीं बनाता है। मुझे लगता है कि अगर मैं एक गैर-शून्य वस्तु में गुजरता हूं तो यह उस ऑब्जेक्ट का उपयोग पृष्ठ के साथ एक नई वस्तु बनाने के बजाय पृष्ठ प्रस्तुत करने के लिए करेगा ... – rjbez

-1

मैं इस प्रयोग किया जाता है की पहचान करने के लिए यदि अनुरोध एक API स्रोत

String.valueOf(URL.getCurrentRequestUrl()).toLowerCase().contains('services/soap') 
+2

मुझे नहीं पता कि यह इस प्रश्न पर कैसे लागू होता है? – rjbez

0

अपने प्रश्न का anwser कि StandardController मापदंडों visualforce पेज के लिए पारित साथ कोई संबंध नहीं है है से आया है। जब आप इसे समझते हैं, तो आप बेहतर समझेंगे कि अपने टेस्ट में मानक नियंत्रक ऑब्जेक्ट और क्वेरी पैरामीटर से कैसे निपटें।

जब पृष्ठ का उपयोग किया जाता है तो ब्राउज़र को फेंक दिया जाता है, तो मानक नियंत्रक यूआरएल से आईडी पैरा को पुनर्प्राप्त करके निर्मित होता है। निम्नलिखित पृष्ठ के मानक नियंत्रक और नियंत्रक विस्तार के निर्माण के चरण हो सकते हैं।

  1. ईद परम पैरामीटर सूची से ApexPages.StandardController sc = new ApexPages.StandardController(my_Object)
  2. बुला अंत में, instanciate सभी नियंत्रक एक्सटेंशन द्वारा दिए गए आईडी My_Object my_Object=[SELECT Id, Name FROM My_Object WHERE Id = :id]
  3. दिया वस्तु के साथ मानक नियंत्रक का निर्माण के साथ id=ApexPages.currentPage().getParameters().get('id');
  4. लोड Sobject पुनर्प्राप्त मानक नियंत्रक MyExtension myExt = new MyExtension(sc) के साथ।

इससे, आप देख सकते हैं कि एसओब्जेक्ट पास करके मानक नियंत्रक ऑब्जेक्ट को इंस्टासिटिंग करना स्वचालित रूप से तर्क के रूप में पारित एसओब्जेक्ट की आईडी के साथ क्वेरी पैरामीटर नहीं बनाता है। इसलिए यदि आपके परीक्षण उद्देश्य के लिए आपको क्वेरी पैरामीटर तक पहुंचने की आवश्यकता है, तो आपको इसे पैरामीटर की सूची में स्पष्ट रूप से जोड़ना होगा जैसा आपने किया था।

संबंधित मुद्दे