Méthode non sur l'objet fantaisie mise en œuvre d'une interface donnée dans PHPUnit?

Je suis nouveau sur les tests unitaires et de PHPUnit.

J'ai besoin d'une maquette, sur laquelle j'ai un contrôle total, la mise en œuvre de ConfigurationInterface interface. Sujet de Test est ReportEventParamConverter objet et le test se doit de vérifier l'interaction entre un objet et l'interface.

ReportEventParamConverter objet (ici simplifié):

class ReportEventParamConverter implements ParamConverterInterface
{
    /**
     * @param Request $request
     * @param ConfigurationInterface $configuration
     */
    function apply(Request $request, ConfigurationInterface $configuration)
    {
        $request->attributes->set($configuration->getName(), $reportEvent);
    }

    /**
     * @param ConfigurationInterface $configuration
     * @return bool
     */
    function supports(ConfigurationInterface $configuration)
    {
        return 'My\Namespaced\Class' === $configuration->getClass();
    }
}

Et ce est la façon dont je suis en train d'essayer de se moquer de l'interface:

$cls = 'Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface';
$mock = $this->getMock($mockCls);

J'ai besoin de simuler les valeurs renvoyées par deux méthodes: getClass() et getName(). Par exemple:

$mock->expects($this->any())
    ->method('getClass')
    ->will($this->returnValue('Some\Other\Class'))
;

Quand je crée un nouveau ReportEventParamConverter et test supports() méthode, j'ai le PHPUnit erreur:

Fatal error: Call to undefined method
Mock_ConfigurationInterface_21e9dccf::getClass().

$converter = new ReportEventParamConverter();
$this->assertFalse($converter->supports($mock));
  • Le ParamConverterInterface a la getClass() méthode?
  • n'est-ce important?
  • Veuillez répondre à la question d'ajouter plus d'informations à votre question. Qui aurait de l'importance. En dehors de cela, il serait ma première hypothèse pourquoi la maquette n'a pas cette fonction. De sorte que certains de base de débogage.
  • non, il n'est pas. Et getClass() n'est jamais appelé sur un ParamConverterInterface instance.
  • Elle est invoquée dans le supports() méthode, n'est-ce pas?
  • invoquée dans le supports() méthode sur la ConfigurationInterface exemple, pas sur le ParamConverterInterface. Donc, il n'y a pas de méthode getClass() dans ParamConverterInterface et il ne devrait pas.
  • J'ai mélangé les noms d'interface, est getClass() dans ConfigurationInterface alors? Non, il n'est pas: github.com/sensio/SensioFrameworkExtraBundle/blob/master/... - de sorte qu'il n'existe pas.
  • non, il n'y en a pas. Apparemment, la méthode devrait être là (comme par de la documentation: symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/...)...
  • Comme il n'existe pas, je suppose (je n'ai pas vérifié la maquette du code de bibliothèque) la maquette ne pas ajouter un talon de méthode pour cela. Comme elle est appelée (par supports(), PHP va jeter l'erreur fatale que la fonction n'existe pas dans la stub.
  • merci pour votre aide, c'était la méthode manquante alors.

InformationsquelleAutor gremo | 2012-09-26