Wie verhindere ich, dass PhpStorm bei Verwendung von PHPUnit-Mocks eine Erwartete Warnung anzeigt?

8

Beim Spotten einer Schnittstelle in PHPUnit beschwert sich PhpStorm, wenn es als Parameter für eine typisierte Funktion verwendet wird.

Beispiel

%Vor%

On $a->foo($mock); PhpStorm unterstreicht $mock mit der Warnung Expected InterfaceA, got PHPUnit_Framework_MockObject_MockObject

Bild

Ich schätze, es passiert, weil PHPUnit die Laufzeitumgebung simuliert und PhpStorm nicht wissen kann, dass es tatsächlich die Schnittstelle implementiert.

    
Hirnhamster 23.08.2014, 17:41
quelle

1 Antwort

13

Ich habe im Jetbrain-Blog unter eine Umgehungsmöglichkeit für dieses Problem gefunden PhpStorm Type Inference und Mocking Frameworks . Der wichtige Teil:

  

Standardmäßig kann PhpStorm die verfügbaren Methoden ermitteln   auf dem Mock-Objekt. Es zeigt jedoch nur solche für PHPUnit an   PHPUnit_Framework_MockObject_MockObject-Klasse. Zum Glück können wir es   löse dies, indem du PhpStorm anweist, Informationen über den Typ zu erhalten   andere Klassen, indem Sie einen einfachen Docblock-Kommentar verwenden.

Um die Warnung verschwinden zu lassen, müssen wir /** @var InterfaceA */ /** @var InterfaceA|PHPUnit_Framework_MockObject_MockObject */ (an Supericy) hinzufügen, um PhpStorm mitzuteilen, dass unser Mock tatsächlich InterfaceA implementiert:

%Vor%

Das nervte mich für einige Zeit, hoffe es hilft jemandem:)

Bearbeiten

Da PHPUnit_Framework_MockObject_MockObject sehr hässlich zu tippen ist, können Sie es über MOOMOO abkürzen und PHPStorms automatisch vervollständige den Rest:

    
Hirnhamster 23.08.2014, 17:41
quelle