2009-08-11 9 views
7

Meine Suche nach der Verwendung von Namespaces in PHP geht weiter. Diesmal gibt PHPUnit mir Probleme. Mein Setup() Methode ist wie folgt:PHPUnit getMock() mit Namespace

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

Die getMock() -Methode nur in PHP-Ergebnisse für eine NonPersistentStorage Klasse suchen. Nicht im Namespace.

F: Was muss ich ändern, damit die getMock() -Methode nach der Klasse im Namespace sucht?

Edit: Der doppelte Backslash ist nicht das Problem. Siehe auch: : (Zitat)

'Innerhalb einer Zeichenfolge in Anführungszeichen ist die Backslash-Escape-Sequenz viel sicherer zu verwenden, aber es wird empfohlen, Backslashes in allen Zeichenfolgen als bewährte Methode zu umgehen.

edit: Was für mich gearbeitet ist in den Kommentaren der Antwort von Ignace R.

Antwort

2

String Verweise auf Klassen im Allgemeinen nicht den führenden Backslash haben. Versuchen Sie es zu entfernen und sagen Sie uns, ob es funktioniert.

BEARBEITEN: und wenn nicht, versuchen Sie class_alias, um einen Alias ​​im globalen Namespace für diese Klasse zu erstellen. Allerdings wäre das eine hässliche Lösung ...

+0

versucht, aber nicht funktioniert. – koen

+0

Nun, mit "führenden Backslash" meinte ich beide führenden Backslashes, aber ich hoffe du hast es trotzdem verstanden. –

+0

Hoppla, tut mir leid. Es funktioniert aber auch nicht. – koen

-2

Ich denke, dass Sie Ihr Problem einschließlich der Klasse \ MyNamespace \ NonPersistentStorage in Ihrer Testdatei lösen können.

+3

Ich denke, dass Sie den ganzen Punkt des Spottunterrichts vermissen. –

2

Verwendung diese Zeichenfolge anstelle (ohne die doppelten Schrägstriche):

$mock = $this->getMock('\MyNamespace\NonPersistentStorage');