2014-12-22 10 views
8

Uczę się testowania jednostki przy pomocy PHPUnit 4.3.5/PHP 5.5.14. Wszystko poszło dobrze, dopóki nie spróbowałem uzyskać zasięgu mojego kodu. Otrzymuję ten błąd: "Próbuję @cover lub @use nie istniejącej metody" MyClass :: __ construct ", gdy próbuję uzyskać zasięg kodu.Próbowałem inne odpowiedzi SO, ale nie mogłem go naprawić.Jakie pomysły co robię źle ? Dzięki!PHPUnit: Próbowanie @cover lub @use nie istniejącej metody

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

Czy Twoja klasa naprawdę mają metodę __construct? Sprawdziłem i błąd występuje tylko wtedy, gdy nie ma konstruktora. W takim przypadku nie możesz tego ukryć. – gontrollez

+0

Tak, MyClass (extends MyBaseClass) ma metodę __construct, w której inicjuję niektóre właściwości, a następnie wywołuje parent :: __ construct ($ params); Może to ma coś wspólnego z problemem? MyBaseClass ma również metodę __construct ($ params). – MrTourkos

Odpowiedz

7

Jeśli klasa ma wdrożyć metodę __construct, to problem jest to, że sama klasa nie została znaleziona. rozpocząć usuwanie adnotacji @covers, i sprawdzić, czy klasa może być załadowany. na przykład spróbować : var_dump(class_exists('MyClass')); wewnątrz testu (przed twierdzą, że przypuszczam nie przejdzie)

w adnotacjach i ogólnie podczas przechodzenia swoją nazwę klasy jako ciąg znaków, należy zawsze odnosić się do klasy, stosując swoją pełną nazwę przestrzeni nazw.:

\MyClass 
\MyNamespace\MyClass 
+0

Dzięki! Zmieniono nazwę tak, jak powiedziałeś i teraz działa dobrze! – MrTourkos

12

można uzyskać ten sam błąd, jeśli oczekują @covers adnotacja do pracy z nazw użytku operator.

Poniższy kod nie zadziała:

<?php 

namespace MyCompany\MyBundle\Test\UnitTest\Service; 

use MyCompany\MyBundle\Service\ClassToTest; 

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

Inteligentne IDE jak PHPStorm rozwiązać ClassToTest::someMethod() adnotacji jeśli CTRL + kliknij go, ale PHPUnit daje błąd Trying to @cover or @use not existing method "ClassToTest::someMethod"..

Jest prośba przyciąganie do tego tutaj: https://github.com/sebastianbergmann/phpunit/pull/1312

Jako pracy wokół prostu wykorzystać pełną nazwę klasy:

<?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 
    } 
} 
Powiązane problemy