2012-07-26 13 views
6

Próbuję stworzyć makiety do zaspokojenia typehint z tym kodem (kpina):Mock ramy zwraca klasę z inną nazwą i typem

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper'); 

lub tym (PHPUnit):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper'); 

Ale fałszywa zwana nazywa się Mockery\Mock Object lub Mock_iFileSystemWrapper_a5f91049. Jak mam wpisać to sprawdzić, gdy nie jest to przykład tego, czego potrzebuję w ogóle z obu framework?

Dlaczego dokładnie jest to próbne ramy próbujące załadować prawdziwą klasę? Gdybym chciał prawdziwej klasy, zawarłbym prawdziwą klasę.

Ten problem zwolnił mnie tak wiele razy, pisząc testy. Zamierzam tylko rzucić typem wskazującym na okno i zamiast tego sprawdzić nazwy klas, lub po prostu użyć obiektów produkcyjnych, ponieważ mocks są bolesne w użyciu.

+1

Pokaż wynikiem 'var_dump ($ mock instanceof \ Kontrakty \ Pomocnicy \ iFileSystemWrapper);' '$ mock' gdzie jest, co ten kod zwraca – zerkms

+0

' bool (false) '- – Seralize

+0

To dziwne: -S – zerkms

Odpowiedz

-2

Potrzebujesz użyć specjalnej funkcji do sprawdzenia klasy bazowej. Somthing tak:

$mock = $this->getMock('MyClass'); 
$this->assertInstanceOf('MyClass', $mock); 
+0

Testuje tylko to, że obiekt próbny jest instancją klasy lub interfejsu, który już podałeś, co naprawdę jest testowaniem frameworka testowego :-) Jeśli jednak zamiast tego użyjesz zwykłego 'if' i operatora' instanceof', to dobry IDE przestanie pokazywać ostrzeżenie o "nieprawidłowym typie parametru". – leftclickben

2

Właśnie eksperymentowałem z istniejącym testu własną rękę, i przez zmianę nazwy przestrzeni nazw z jednego interfejsu, który istnieje do jednego, że nie istnieje, mam dokładnie takie samo jak to, co opisz (używając phpunit). Mój fałszywy obiekt miał nazwę klasy Mock_ViewInterface_c755461e. Kiedy zmienię go z powrotem na poprawną nazwę interfejsu, działa dobrze.

Dlatego powiedziałbym, że:

  1. Próbujesz użyć nazwy interfejsu, który nie istnieje (np literówka lub brakujący składnik przestrzeni nazw).
  2. Twój kod biblioteki nie jest ładowany z jakiegoś powodu, np. Automatyczne ładowanie nie jest poprawnie skonfigurowane w bootstrapie testu urządzenia.
Powiązane problemy