2013-06-05 9 views
6

में एक नकली में निरंतर जोड़ें, क्या PHPUnit का उपयोग करके एक मॉक में कक्षा निरंतर जोड़ना संभव है?PHPUnit

एक उदाहरण यहाँ:

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
     // Here I'd like to add a constant to $mock; something like 
     // $mock::FOOBAR; 
    } 
} 

आप में से किसी जानते हैं कि कैसे मैं काम करने के लिए इस behavious प्राप्त कर सकते हैं करता है?

Thx!

+0

क्या प्रतिबिंब वर्ग आप जो चाहते हैं उसे पूरा करेंगे? http://php.net/manual/en/book.reflection.php –

उत्तर

2

यह प्रश्न कुछ समय के साथ उत्तर नहीं दिया गया है, लेकिन मैं इसी समस्या में भाग गया। यह संभव नहीं प्रतीत होता है; हालांकि, वहाँ कम से कम एक गंदा काम के आसपास:

अपने परीक्षण फ़ाइल में

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
    } 
} 

// tests 

?> 

उसके बाद, आप मज़ाक उड़ाया कार्यक्षमता के लिए अपने मज़ाक उड़ाया ऑब्जेक्ट का उपयोग करें, और आप वर्ग निरंतर उसी तरह का उपयोग आप मूल रूप से होता है । उदाहरण के लिए:

// Call a method on mocked object 
// (would need to add this method to your mock, of course) 
$mock->doSomething(); 
// Use the constant 
$fooBar = SomeClass::FOOBAR; 

यह गंदा है, तो मुझे यकीन है कि चीजों को बहुत आप autoloading वास्तविक SomeClass वर्ग लोड करने के लिए कोशिश करता है कि किसी प्रकार का उपयोग कर रहे हैं में गड़बड़ हो सकता हूँ, लेकिन यह काम करेंगे "ठीक" यदि आप मूल SomeClass लोड नहीं कर रहे हैं।

मुझे निश्चित रूप से अन्य समाधान सुनने में दिलचस्पी है और साथ ही यह वास्तव में कितना गंदा है पर कुछ प्रतिक्रिया प्राप्त करने में दिलचस्पी है।

+0

शायद 'कुछ क्लास' घोषित किया जाना चाहिए ** 'क्लास SomeClassMock इस दृष्टिकोण के लिए कुछ क्लास' ** को विस्तारित करता है जिस तरह से इसे और 'SomeClass' अपने सार में खुद को 'अंतिम' नहीं होना चाहिए। –