Comment se moquer de Symfony 2 service dans un test fonctionnel?
J'ai symfony service qui utilise redis connexion dans certaines méthodes, mais pas dans toutes les méthodes.
class ServiceA
{
private $redis;
public function __construct($redis)
{
$this->redis = $redis;
}
public function getRequest($param1, $param2)
{
$result = $param1+ $param2;
return $request;
}
.. other methods which use $redis connection
}
Je suis en train d'écrire de test fonctionnel pour le code qui n'utilisent que getRequest (méthode cette méthode n'a pas besoin redis connexion), mais que le constructeur prend la connexion en tant qu'argument, quand je lance le test, il a essayé de se connecter redis serveur.
Comment puis-je écrire se moquer de service qui n'utilise pas le redis connexion et d'ignorer d'origine constructeur.
Je suis en train de l'approche mentionnée ci-dessous, mais sans succès. Il tente encore de se connecter redis bien que j'ai désactivé d'origine constructeur.
http://blog.lyrixx.info/2013/04/12/symfony2-how-to-mock-services-during-functional-tests.html
$serviceA = $this->getMockBuilder('ServiceA')
->disableOriginalConstructor()
->getMock();
static::$kernel->getContainer()->set('my_bundle.service.a', $serviceA);
Vous devez vous connecter pour publier un commentaire.
Après la création de
ServiceA
fantaisie, vous devez le transmettre au client du conteneur (pas celle de noyau est parce que client de l'objet construit son propre noyau). Essayez ceci:Prêter attention, que vous devez vous injecter ce moqué de service chaque fois que vous faites une demande. C'est parce que le client reconstruit noyau entre chaque deux demandes.
$client->getContainer()->set('my_bundle.service.a', $serviceA)
implique que$container->get()
ne sera pas instancier le service plus? Nous voulons pour "contourner" le service, mais veulent toujours le conteneur pour injecter le service de ses dépendances par la suite.Vous ne devriez pas vous moquer de votre classe testée, vous devriez en dérision le Redis classe et de l'injecter.
Si Redis n'est pas utilisé pour ce test, vous n'avez même pas besoin de configurer la simulation.
Il y a un outil spécial, qui prend soin de se moquaient de services - https://github.com/ramunasd/symfony-container-mocks
C'est facile comme ça:
Avez-vous essayé ?