2014-12-22 25 views
8

PHPUnit 4.3.5/PHP 5.5.14 ile nasıl test yapılacağını öğreniyorum. Kod kapsamımı almaya çalışana kadar her şey yolunda gitti. Bu hatayı alıyorum: "Mycover :: __ build", "MyClass :: __ build" denir. "Diğer SO cevaplarını denedim ama düzeltemedim. Herhangi bir fikir yanlış yapıyorum." sınıf __construct yöntemini uygulamak yoksa? teşekkürler!PHPUnit: @cover veya @use yöntemini kullanmaya çalışıyorum

/** 
* Test constructor. 
* @covers MyClass::__construct 
* @group MyClassTest 
*/ 
public function test_Can_Create_MyClass_Instance() { 
    $this->assertInstanceOf('MyClass', $this->_myClass); 
} 
+1

sınıf gerçekten bir __construct yöntemi var mı

bu burada bir çekme isteği var? Kontrol ettim ve hata sadece kurucu olmadığı zaman olur. Bu durumda onu karşılayamazsın. – gontrollez

+0

Evet, MyClass (MyBaseClass'ı genişletir), cadıda bir __construct yöntemine sahiptir, bazı özellikleri ilklendirir ve ardından parent :: __ construct ($ params); Belki de bunun problemle ilgisi var mı? MyBaseClass ayrıca, __construct ($ params) yöntemine sahiptir. – MrTourkos

cevap

7

, o zaman sorun sınıfı kendisi bulunmazsa olmasıdır. Örneğin deneyin. @covers ek açıklama kaldırarak başlayın ve sınıf yüklenebilir olmadığını kontrol :

(Not: var_dump(class_exists('MyClass'));: sınama içinde var_dump(class_exists('MyClass')); sınama() iletinin içinde bir dize olarak geçerken, ek olarak, tam ad alan adını kullanarak sınıfına başvurmalısınız:Eğer @covers açıklama ad kullanım operatör ile çalışmasını bekliyoruz eğer

\MyClass 
\MyNamespace\MyClass 
+0

Teşekkürler adamım! Söylediğin adı değiştirdi ve şimdi iyi çalışıyor! – MrTourkos

12

Aynı hatayı alabilirsiniz.

Aşağıdaki kod çalışmaz: CTRL + tıklayın ama PHPUnit size Trying to @cover or @use not existing method "ClassToTest::someMethod". hatası verecektir eğer PhpStorm gibi

<?php 

namespace MyCompany\MyBundle\Test\UnitTest\Service; 

use MyCompany\MyBundle\Service\ClassToTest; 

class MyAwesomeTest 
{ 
    /** 
    * @covers ClassToTest::someMethod() 
    */ 
    public function testSomeMethod() 
    { 
     // do your magic 
    } 
} 

Akıllı IDE ClassToTest::someMethod() ek açıklama çözmek. https://github.com/sebastianbergmann/phpunit/pull/1312

sadece tam sınıf adını kullanın Geçici bir çözüm:

<?php 

namespace MyCompany\MyBundle\Test\UnitTest\Service; 

use MyCompany\MyBundle\Service\ClassToTest; 

class MyAwesomeTest 
{ 
    /** 
    * @covers \MyCompany\MyBundle\Service\ClassToTest::someMethod() 
    */ 
    public function testSomeMethod() 
    { 
     // do your magic 
    } 
} 
İlgili konular