Es gibt die Möglichkeit, Methode und Rückgabewert abhängig von Methode Argument zu verspotten? Ich brauche das, um Container zu simulieren und Service zu bekommen. Ich versuche, dies zu tun durch:Mock-Methode des Objekts und Rückgabewert des Objekts hängen von der Methode ab param
$container = $this
->getMockBuilder(Container::class)
->getMock();
$container
->expects($this->any())
->method('get')
->with('logger')
->willReturn($this->loggerMock)//this is logger object
;
$container->expects($this->any())
->method('get')
->with('database')
->will($this->returnValue(self::$pdo));//database object
$this->dataProviderFactory = new DataProviderFactory($container);
Und wenn ich nenne das: print_r ($ Container-> get ('Logger')); sollte Logger-Objekt haben.
Aber das funktioniert nicht. Ich habe Fehler unter:
Erwartung für Methodenname fehlgeschlagen ist gleich beim Aufruf null oder mehrere Male
Parameter 0 for invocation Symfony\Component\DependencyInjection\Container::get('logger', 1) does not match expected value.
Failed asserting that two strings are equal.
Expected :'database'
Actual :'logger'
Dies ist in keinem Zusammenhang mit Ihrer Frage, aber sind Sie sicher, dass Sie Ihre Fabrik müssen auf den gesamten Behälter abhängig sein? Es könnte besser sein, nur die Dienste, die es benötigt, wie den Logger und die Datenbankverbindung, zu injizieren. Und es macht das Testen ein bisschen einfacher. – Cerad
Im Moment kann ich dies nicht in der Weise tun, die Sie vorschlagen, weil aufgrund der Struktur der Anwendung, die ich entwickeln –