2012-05-02 6 views
7

के उदाहरण देने से पहले कक्षाओं की आवश्यकता के लिए मजबूर करता है मैं एक ऐसी वस्तु का परीक्षण कर रहा हूं जो किसी अन्य वर्ग का उदाहरण देता है। आंतरिक रूप से, वह कक्षा require_once पर कॉल करती है।PHPUnit मुझे

InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name 

यह संदेश चला जाता है एक बार मैं assertInstanceOf को कॉल करने से पहले अपने परीक्षण में फिर से require_once फोन: हालांकि, जब मैं उस वस्तु लौटे जाँच करने की कोशिश है कि प्रकार मैं यह संदेश प्राप्त की है। यह सही प्रतीत नहीं होता है। ऐसा लगता है कि PHPUnit को यह समझने के लिए पर्याप्त स्मार्ट होना चाहिए कि कक्षा पहले ही लोड हो चुकी है, इसलिए मुझे इसे फिर से लोड नहीं करना चाहिए। क्या मैं इस गलत सोच रहा हूँ? क्या मेरे पास PHPUnit गलत कॉन्फ़िगर किया गया है? क्या इस परीक्षा में मेरी कक्षा में फिर से आवश्यकता से बचने का कोई तरीका है?

+0

'require_once' वर्ग ही, या कक्षा में भीतर आवश्यक है ', फ़ाइल कक्षा के बाहर, लेकिन जब वर्ग भरी हुई' फ़ाइल लोड किया जाता है? – Malovich

+0

'assertInstanceOf (' MyClass ')' नहीं 'assertInstanceOf (नया MyClass) '। सुनिश्चित करें कि आप एक स्ट्रिंग पास कर रहे हैं और कक्षा का उदाहरण नहीं है। –

+0

मैं पहले से ही एक स्ट्रिंग – Andrew

उत्तर

2

आपका इकाई इस के समान हो सकता है:

$this->assertInstanceOf('MyOtherClass', 
    $this->object->someFunctionReturnsOtherClass()); 

यह यहां छोड़कर ठीक है, ध्यान दें: PHPUnit विधि अपने वस्तु से पहले कहा जाता है। चूंकि आपने कहा था, आपकी ऑब्जेक्ट पहले से आंतरिक रूप से एक आवश्यकता_ऑनसे का मतलब है जब तक कि आपकी विधि को कॉल नहीं किया जाता है, 'MyOtherClass' एक अपरिभाषित वर्ग के रूप में रहता है। वास्तव में क्या हुआ था। Phpunit फ़ंक्शन 'MyOtherClass' का उपयोग करके जांचने के लिए तैयार है और पाया कि यह अपरिभाषित है!

ऑब्जेक्ट की अपनी आवश्यकताएं कभी भी कॉल नहीं की गईं। यही कारण है कि आपको पहले स्वयं को कॉल करना है। यदि आप true == $returnObject instanceOf MyOtherClass जैसे कथन का उपयोग करते हैं तो यह वही समान होगा जो PHP त्रुटि को पार करने में विफल होने के बाद से एक ही त्रुटि लौटाएगा।

22

पूरा नाम स्थान का उपयोग सुनिश्चित करें:

$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj);