2012-02-25 10 views
9

मैं सोच रहा था कि अगर 'वर्ग' में कोई फ़ंक्शन है तो मैं कैसे सत्यापित कर सकता हूं। assertClassHasAttribute काम नहीं करता है, यह सामान्य है क्योंकि फ़ंक्शन एक विशेषता नहीं है।Howto PHPUnit assertFunction

+2

तुम क्यों कि परीक्षण करना चाहते हैं? – Gordon

+0

जब मैं कुछ रिफैक्टरिंग करता हूं तो यह उपयोगी होता है ... परीक्षण करने के बाद, मेरे वर्गों के तरीकों में मदद मिलती है जब मुझे किसी कारण से किसी अन्य वर्ग में किसी विधि को स्थानांतरित करना होता है: जैसे डीकॉप्लिंग जिम्मेदारियों आदि के लिए, – HexaGridBrain

+0

मैं बहस करता हूं कि आपको इसकी आवश्यकता नहीं होगी जब आप सुनिश्चित करें कि निर्भरता ठीक तरह से मजाक कर दी गई है और आपके पास आपका सार्वजनिक एपीआई पूरी तरह से कवर है। – Gordon

उत्तर

32

वहाँ PHPUnit मैं द्वारा प्रदान की एक अभिकथन विधि या तो इसे बना सकते हैं या एक वर्बोज़ संदेश के साथ निचले स्तर कथनों से एक का उपयोग नहीं है जब:

$this->assertTrue(
    method_exists($myClass, 'myFunction'), 
    'Class does not have method myFunction' 
); 

assertTrue() के रूप में बुनियादी रूप में आप प्राप्त कर सकते है। यह लचीलापन का एक बड़ा सौदा करने की अनुमति देता है क्योंकि आप किसी भी अंतर्निहित PHP फ़ंक्शन का उपयोग कर सकते हैं जो आपके परीक्षण के लिए बूल मान देता है। नतीजतन, जब परीक्षण विफल रहता है त्रुटि/विफलता संदेश बिल्कुल सहायक नहीं है। कुछ Failed asserting that <FALSE> is TRUE की तरह। यही कारण है कि दूसरे पैरा को assertTrue() पर देना महत्वपूर्ण है कि परीक्षण क्यों विफल हुआ।

7

यूनिट और एकीकरण परीक्षण परीक्षण व्यवहार के लिए हैं को कक्षा परिभाषा क्या है।

तो PHPUnit इस तरह के दावे प्रदान नहीं करता है। PHPUnit जोर कर सकते हैं या तो एक वर्ग एक नाम एक्स है, एक फ़ंक्शन कि मूल्य somthing है, लेकिन आप क्या आप का उपयोग करना चाहते हैं कर सकते हैं:

/** 
* Assert that a class has a method 
* 
* @param string $class name of the class 
* @param string $method name of the searched method 
* @throws ReflectionException if $class don't exist 
* @throws PHPUnit_Framework_ExpectationFailedException if a method isn't found 
*/ 
function assertMethodExist($class, $method) { 
    $oReflectionClass = new ReflectionClass($class); 
    assertThat("method exist", true, $oReflectionClass->hasMethod($method)); 
} 
+0

कमाल। यह मेरी ज़रूरत के लिए बिल्कुल सही लगता है। धन्यवाद @MounaCheikhna – shan