2015-06-26 18 views
21

PHP özelliğinin nasıl test edileceğine dair bir çözüm bulunup bulunmadığını bilmek istiyorum.Birim testinin nasıl yapılacağı PHP özellikleri

Bu özelliği kullanan bir sınıfı test edebileceğimizi biliyorum. ama daha iyi yaklaşımlar olup olmadığını merak ediyordum. Önceden herhangi bir tavsiye :)

DÜZENLEME

Bir alternatif için

teşekkürler ben feryat göstermek için gidiyorum gibi deney sınıfında kendisinde taşıyıcılığının kullanmaktır.

Ancak `m (bu örnekte) özelliği, sınıf ve PHPUnit_Framework_TestCase arasında değil benzer bir yöntem adı vardır garantisi yoktur çünkü bu yaklaşım bu keskin:

Burada

bir bir örnek özelliği:

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; 
    } 
} 

ve testi: bir simila kullanarak bir taşıyıcılığının test edebilirsiniz

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

sen çalışmıyor hangi ile bunu denedim kodunu belirtin: Burada

belgelerinden örnektir. Bu, birinin size yardımcı olmasına yardımcı olur. –

+0

@AdamB, ben bir örnek kodu olan [ilk cevap] (http://stackoverflow.com/a/31083193/4960774) kendim yazdım. ama bir şey bozuk ya da çalışmıyor gibi değil, dikkat edin sadece ünite test özellikleri için iyi bir yöntem olup olmadığını bilmek istiyorum ve dolaylı olarak bu özelliği kullanan bir sınıfı test ederek değil. tanklar – Ali

cevap

35

soyut bir sınıfın somut yöntemlerini test etmek. Özelliği kullanan bir nesneyi döndürecek olan

PHPUnit has a method getMockForTrait. Sonra özellikleri fonksiyonlarını test edebilirsiniz.

<?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()); 
    } 
} 
?>