8
votes

PHPUNIT GETMOCK () avec espace de noms

Ma quête de commencer à utiliser des espaces de noms dans PHP continue de continuer. Cette fois, Phpunit me donne des problèmes. Ma méthode de configuration () est comme ceci:

$test = new \MyNamespace\NonPersistentStorage(); // works
$mock = $this->getMock('\\MyNamespace\\NonPersistentStorage'); // doesn't work


0 commentaires

3 Réponses :


2
votes

Les références de chaîne aux classes ne disposent généralement pas de la barre oblique inverse. Essayez de le supprimer et dites-nous si cela fonctionne.

edit: et si ce n'est pas le cas, essayez Class_alias pour créer un alias dans l'espace de noms global pour cette classe. Cependant, ce serait une solution laide ...


9 commentaires

Eh bien, par "Lead-Backslash", je voulais dire que les deux backsbashes avancent, mais j'espère que vous l'avez compris de toute façon.


Essayez la solution de contournement de classe_alias alors (au cas où vous ne remarqueriez pas la modification).


Pensais que cela a fonctionné: CLASS_ALIAS ('\\ MYNAMESPACE \\ NONPERSISTENTStorage', «non-persistenttorage»); $ maquette = $ ceci-> getmock ('non-persistenttorage'); Mais cela donne une erreur "Impossible de redéclaréches de classe". Peut-être que je le fais mal?


Il semble que tout soit fait correctement dans votre exemple. Mais quelle énoncé de ces deux jette réellement l'erreur? Est-ce l'appel de classe_alias ou le getmock un?


Class_alias. Inverser les noms donne la même erreur qu'avant. Les problèmes sont que je pense dans le code simulateur de phpunit: classe phpunit_framework_mockobject_mock, ligne 132 du fichier est: $ isclass = class_existes ($ classname, $ callautooad); Cela appelle ma fonction d'autoload qui ne le trouve pas. Mais $ CLASSNAME commence car la même chaîne que l'on donne dans getMock ("classname"), mais la partie d'espace de noms est supprimée. Je suppose donc que la solution serait d'inclure manuellement le fichier.


Ça nécestant ne fonctionne pas. Charge toujours le fichier dans un espace de noms différent.


Eh bien, il ne devrait y avoir aucun problème avec AutoLoading. Si une classe est déjà accessible, il n'est pas automatiquement chargé. Votre problème a l'air étrange ... peut-être que vous pourriez essayer d'aloriasser la classe à un nom complètement différent ou de supprimer l'appel GetMock et de voir si l'aliasing cause toujours des problèmes.


En outre, si vous importez cette classe avant d'aliasing, cela pourrait causer le problème. Essayez de supprimer la déclaration «Utilisation» si elle existe réellement.


Je l'ai résolu avec votre suggestion d'éliminer les \\ au début + modifiant mon autoload (ajouté si File_exists avant Requête_once) Merci pour toutes les suggestions.



-2
votes

Je pense que vous pouvez résoudre votre problème, y compris la classe \ myNamespace \ non persistenttorage dans votre fichier de test.


1 commentaires

Je pense que vous manquez tout le point de cours moqueurs.



4
votes

Utilisez cette chaîne à la place (sans la double back-backslashes): xxx


0 commentaires