2009-03-04 9 views
7

यदि मैं सही हूं, तो सरलतम आपको एक PHP त्रुटि डालने की अनुमति देगा। हालांकि, मैं यह नहीं समझ सकता कि दस्तावेज़ीकरण के आधार पर इसका उपयोग कैसे किया जाए। मैं बात पर जोर देना है कि वस्तु मैं अपने निर्माता में पारित MyOtherObjectसरलतम: कैसे दावा करें कि एक PHP त्रुटि फेंक दी गई है?

class Object { 
    public function __construct(MyOtherObject $object) { 
     //do something with $object 
    } 
} 

//...and in my test I have... 
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
    $this->expectError($object); 
} 

का एक उदाहरण कहाँ मैं गलत जा रहा हूँ है करना चाहते हैं?

उत्तर

13

टाइपिंग संकेत E_RECOVERABLE_ERROR फेंकता है जिसे PHP संस्करण 5.2 के बाद SimpleTest द्वारा पकड़ा जा सकता है। निम्नलिखित में कोई त्रुटि होगी जिसमें पाठ "एक उदाहरण होना चाहिए"। PatternExpectation के निर्माता एक perl regex लेता है।

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $this->expectError(new PatternExpectation("/must be an instance of/i")); 
    $object = new Object($notAnObject); 
} 
+0

मैंने इसे सत्यापित नहीं किया है, इसलिए मुझे लगता है कि यह सच है। आपके उत्तर के लिए धन्यवाद! – Andrew

2

PHP में दोनों त्रुटियां और अपवाद हैं, जो थोड़ा अलग काम करते हैं। किसी प्रकार के टाइप किए गए फ़ंक्शन में गलत प्रकार को पास करना अपवाद उठाएगा। आपको इसे अपने परीक्षण मामले में पकड़ना होगा। उदाहरण के लिए .:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    try { 
    $object = new Object($notAnObject); 
    $this->fail("Expected exception"); 
    } catch (Exception $ex) { 
    $this->pass(); 
    } 
} 

या बस:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $this->expectException(); 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
} 

लेकिन ध्यान दें कि इस लाइन जहां अपवाद तब होता है के बाद परीक्षण को रोकने जाएगा।

+1

मैंने आपको नीचे वोट नहीं दिया। लेकिन, सोचा कि मुझे जिक्र करना चाहिए कि मुझे लगता है कि किसी ने इसे कम क्यों किया होगा: यह उत्तर 'अपवाद' से संबंधित है, न कि 'त्रुटियों'। जब एक प्रकार का संकेत गलत प्रकार को चुनता है, तो यह 'त्रुटि' फेंकता है और 'अपवाद' नहीं। –

1

आपको इससे पहले कि त्रुटि होने की उम्मीद करनी पड़ेगी, तो सरल टेस्ट इसे निगल लेगा और एक पास गिनती होगी, अगर परीक्षण खत्म हो जाता है और कोई त्रुटि नहीं होती है तो यह असफल हो जाएगी। (उम्मीद है कि त्रुटि और उम्मीद अपवाद जो क्रमशः PHP (गैर-घातक) त्रुटियों और अपवादों के लिए कार्य करता है।)

2

बाहर निकलता है, सरलटेस्ट वास्तव में इसका समर्थन नहीं करता है। आप SimpleTest में घातक PHP त्रुटियों को नहीं पकड़ सकते हैं। टाइपिंग संकेत बहुत बढ़िया है, सिवाय इसके कि आप इसका परीक्षण नहीं कर सकते। संकेत टाइपिंग घातक PHP त्रुटियों फेंकता है।

+2

PHP संस्करण 5.2 के रूप में SimpleTest टाइप संकेत त्रुटियों को कैप्चर कर सकता है। मेरा जवाब देखें –

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