2013-09-05 9 views
8

मैं PHPUnit को देख रहा हूं और निम्नलिखित में मुझे आश्चर्य है। PHPUnit int संभालता है या नहीं करता है। बूलियन के रूप में 1 और 0 है? मेरे वर्तमान परीक्षण में, यह नहीं है।PHPUnit Assert True One (1)

उदाहरण: $this->assertTrue(preg_match('/asdf/', 'asdf'));

मेरी परीक्षण इस preg_match के रूप में, विफल रहता है() पूर्णांक 1 या 0 लौटा रहा है और केवल झूठे bool यदि कोई त्रुटि होती है।

मैं इसे निम्नलिखित कार्य करता हूं, जाहिर है, क्योंकि तुलना हमेशा बूल लौटती है। $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);

क्या मुझे अपने preg_match में कुछ याद आ रहा है, या इसे बनाने के लिए मेरा दावा .... कम सख्त?

संपादित करें: क्या assertTrue को मिलान करने के लिए प्रकार की आवश्यकता होती है? क्या दावा कम सख्त बनाने का कोई तरीका है?

उत्तर

17

पीएचपी अलग boolean प्रकार, TRUE और FALSE (केस-संवेदी स्थिरांक) के अपने मूल्य हैं 1 और 0 के पूर्णांक मूल्यों को समान नहीं हैं।

जब आप सख्त तुलना (===) का उपयोग करते हैं, तो यह काम नहीं करता है: TRUE !== 1 और FALSE !== 0

आप प्रकार करतब दिखाने का उपयोग करते हैं, TRUE 1 और FALSE में बदल जाती है 0 में बदल जाती है (और, इसके विपरीत, 0 FALSE में बदल जाती है, किसी भी अन्य पूर्णांक TRUE में बदल जाती है)। तो, TRUE == 1 और FALSE == 0

PHPUnit में, assertTrue और assertFalse प्रकार-निर्भर, सख्त जांच हैं। assertTrue($x) चेक करता है कि TRUE === $x, यह assertSame(TRUE, $x) जैसा है, और assertEquals(TRUE, $x) जैसा नहीं है।

आपके मामले में, एक संभव दृष्टिकोण स्पष्ट प्रकार कास्टिंग उपयोग करने के लिए होगा:

$this->assertRegExp('/asdf/', 'asdf'); 
3

कृपया assertTrue या assertFalse का एक गुच्छा का उपयोग न करें जब एक जटिल फ़ंक्शन कॉल में एम्बेडेड वास्तविक तर्क के साथ चेक करें, जब अधिक विशिष्ट परीक्षण फ़ंक्शंस उपलब्ध हों।

PHPUnit का दावा करने का एक बहुत बड़ा सेट है जो उस मामले में वास्तव में सहायक होता है जब वे मुलाकात नहीं करते हैं। वे आपको गलत होने के संदर्भ का एक गुच्छा देते हैं, जो आपको डिबगिंग में सहायता करता है।

एक रेगुलर एक्सप्रेशन के लिए जाँच करने के लिए, का उपयोग assertRegExp() (http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.assertRegExp देखें)

+0

यह नहीं करता है ':

$this->assertTrue((boolean)preg_match('/asdf/', 'asdf')); 

हालांकि, PHPUnit नियमित अभिव्यक्ति के खिलाफ स्ट्रिंग की जाँच के लिए समर्पित अभिकथन के लिए होता है मेरे सवाल का जवाब नहीं है, लेकिन निश्चित रूप से एक योग्य टिप्पणी है। धन्यवाद, ध्यान दिया। – alairock

+2

'assertTrue' वास्तविक' सत्य 'मान की जांच करता है, कुछ "सच्चाई" नहीं "1" के रूप में। – Sven

+0

अधिक विशिष्ट होने के लिए, मैं समझता हूं कि आप क्या कह रहे हैं: PHPUnit में 'assertTrue' एक "ट्रिपल-बराबर" तुलना करता है, न कि "डबल-बराबर" तुलना। (देखें 'var_dump (1 == सत्य);' और 'var_dump (1 === सच); 'पहला वापस सच आता है और दूसरा वापस झूठ आता है, क्योंकि" ट्रिपल-बराबर "भी प्रकार से मेल खाता है। इस प्रकार मेरा प्रश्न। मैं मूल को विशिष्ट के रूप में संपादित कर दूंगा। – alairock