2010-01-31 19 views
17

ho creato la seguente interfaccia:Creazione oggetto fittizio di interfaccia con il tipo di suggerimento nel metodo non riesce a PHPUnit

<?php 
interface Action 
{ 
    public function execute(\requests\Request $request, array $params); 
} 

Poi cerco di fare un oggetto fittizio di questa interfaccia con PHPUnit 3.4, ma ottengo il seguente errore:

Errore irreversibile: dichiarazione di Mock_Action_b389c0b1 :: execute() deve essere compatibile con quella di Action :: execute() in D: \ Xampp \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php (1121): eval() codice d sulla linea 2

Ho controllato la traccia dello stack ottenuta da PHPU nit e ha scoperto che crea un oggetto Mock che implementa l'azione di interfaccia, ma crea il metodo Execute nel seguente modo:

<?php 
public function execute($request, array $params) 

Come si può vedere, PHPUnit assume la matrice tipo di suggerimento, ma dimentica di \ le richieste di \ Request. Che ovviamente porta ad un errore. Qualcuno sa una soluzione alternativa per questo errore?

Ho provato anche senza spazi dei nomi, ma ho ancora lo stesso errore.

+2

Mark, come si crea il mock? –

risposta

23

Forse un po 'in ritardo.

Avevo esattamente lo stesso problema e si è scoperto che il tipo suggerito non era caricato e non caricabile. Di conseguenza, ReflectionParameter di PHP non restituisce il nome della classe e il generatore di mock di PHPUnit non lo include.

Se si assicura che il tipo suggerito sia caricato o caricabile utilizzando il caricamento automatico, dovrebbe funzionare.

+0

Non è mai troppo tardi: questo mi ha aiutato immensamente 6 anni dopo. Il mio problema era che lo spazio dei nomi non corrispondeva alla struttura delle directory dopo un refact sciatto, quindi non era caricabile in PSR4. È un problema oscuro in quanto il finto costruttore non avvisa affatto, ma crea una classe casuale! L'ho diagnosticato cercando di creare una classe figlia manuale simulata e, naturalmente, questo ha mostrato il problema del namespace abbastanza rapidamente. – scipilot

Problemi correlati