2015-06-26 7 views
21

मैं जानना चाहता हूं कि एक PHP विशेषता का यूनिट-परीक्षण करने के तरीके पर कोई समाधान है या नहीं।यूनिट परीक्षण कैसे करें PHP लक्षण

मुझे पता है कि हम एक वर्ग का परीक्षण कर सकते हैं जो विशेषता का उपयोग कर रहा है। लेकिन मैं सोच रहा था कि बेहतर दृष्टिकोण हैं या नहीं।

अग्रिम में कोई सलाह :)

संपादित

एक वैकल्पिक करने के लिए धन्यवाद परीक्षण वर्ग अपने आप में विशेषता का उपयोग करने के रूप में मैं bellow प्रदर्शित करने के लिए जा रहा हूँ है।

लेकिन मैं `है कि इस दृष्टिकोण के बाद से वहाँ कोई गारंटी है विशेषता, वर्ग और भी PHPUnit_Framework_TestCase के बीच नहीं समान विधि के नाम (इस उदाहरण में) देखते हैं के लिए उत्सुक नहीं:

यहाँ एक है उदाहरण विशेषता:

trait IndexableTrait 
{ 
    /** @var int */ 
    private $index; 

    /** 
    * @param $index 
    * @return $this 
    * @throw \InvalidArgumentException 
    */ 
    public function setIndex($index) 
    { 
     if (false === filter_var($index, FILTER_VALIDATE_INT)) { 
      throw new \InvalidArgumentException('$index must be integer.'); 
     } 

     $this->index = $index; 

     return $this; 
    } 

    /** 
    * @return int|null 
    */ 
    public function getIndex() 
    { 
     return $this->index; 
    } 
} 

और उसके परीक्षण:

class TheAboveTraitTest extends \PHPUnit_Framework_TestCase 
{ 
    use TheAboveTrait; 

    public function test_indexSetterAndGetter() 
    { 
     $this->setIndex(123); 
     $this->assertEquals(123, $this->getIndex()); 
    } 

    public function test_indexIntValidation() 
    { 
     $this->setExpectedException(\Exception::class, '$index must be integer.'); 
     $this->setIndex('bad index'); 
    } 
} 
+0

कोड तुम्हारे साथ जो काम नहीं करता है यह करने के लिए कोशिश की है प्रदान करें:

यहाँ प्रलेखन से उदाहरण है। इससे आपकी सहायता करने में कोई मदद मिलेगी। –

+0

@ एडमबी, मैंने [पहला जवाब] लिखा है (http://stackoverflow.com/a/31083193/4960774) स्वयं, जिसमें एक नमूना कोड है। लेकिन कृपया ध्यान दें कि ऐसा कुछ नहीं टूटा हुआ है या काम नहीं कर रहा है, मैं सिर्फ यह जानना चाहता हूं कि यूनिट टेस्ट लक्षणों के लिए सीधे कोई अच्छा तरीका नहीं है और उस विशेषता का उपयोग करने वाले वर्ग के यूनिट परीक्षण द्वारा अप्रत्यक्ष रूप से नहीं। टैंक – Ali

उत्तर

35

आप एक simila का उपयोग कर एक विशेषता परीक्षण कर सकते हैं एक सार वर्ग 'ठोस तरीकों का परीक्षण करने के लिए आर।

PHPUnit has a method getMockForTrait जो विशेषता का उपयोग करने वाली वस्तु को वापस कर देगा। फिर आप गुणों का परीक्षण कर सकते हैं।

<?php 
trait AbstractTrait 
{ 
    public function concreteMethod() 
    { 
     return $this->abstractMethod(); 
    } 

    public abstract function abstractMethod(); 
} 

class TraitClassTest extends PHPUnit_Framework_TestCase 
{ 
    public function testConcreteMethod() 
    { 
     $mock = $this->getMockForTrait('AbstractTrait'); 

     $mock->expects($this->any()) 
      ->method('abstractMethod') 
      ->will($this->returnValue(TRUE)); 

     $this->assertTrue($mock->concreteMethod()); 
    } 
} 
?> 
संबंधित मुद्दे