vfs-stream

___ qstnhdr ___ Versuch, Dateisystemoperationen mit VFSStream zu testen ___ qstntxt ___

Ich versuche, eine Dateisystemoperation (naja, eigentlich eine Lektüre von php: // input) mit vfsStream zu verspotten, aber das Fehlen anständiger Dokumentation und Beispiele behindert mich wirklich.

Der relevante Code der getesteten Klasse lautet wie folgt:

%Vor%

Das Setup, das ich in meinem PHPUnit-Test verwende, ist wie folgt:

%Vor%

In einem tatsächlichen Test (der eine Methode aufruft, die getHandle () indirekt auslöst) versuche ich, das VFS einzurichten und eine Assertion wie folgt auszuführen:

%Vor%

Dies führt nur dazu, dass der Test aufhört.

Offensichtlich mache ich hier etwas sehr falsches, aber angesichts des Zustands der Dokumentation kann ich nicht herausfinden, was ich tun soll. Ist das etwas, das von vfsstream verursacht wird, oder spottet phpunit über das, was ich hier sehen muss?

    
___ answer11704377 ___

Also ... wie testet man mit Streams? Alle vfsStream bietet einen benutzerdefinierten Stream-Wrapper für Dateisystemvorgänge. Sie benötigen die vollständige vfsStream-Bibliothek nicht, nur um das Verhalten eines einzelnen Stream-Arguments nachzuahmen - es ist nicht die richtige Lösung. Stattdessen müssen Sie Ihren eigenen einmaligen Stream-Wrapper schreiben und registrieren, da Sie nicht versuchen, Dateisystemoperationen zu überspielen.

Angenommen, Sie haben folgende einfache Klasse zum Testen:

%Vor%

Im wirklichen Leben machst du:

%Vor%

Um es zu testen, erstellen wir einen eigenen Stream-Wrapper, der es uns ermöglicht, das Verhalten des Streams, den wir übergeben, zu steuern. Ich kann nicht zu sehr ins Detail gehen, da benutzerdefinierte Stream-Wrapper ein großes Thema sind. Aber Grundsätzlich läuft der Prozess so:

  1. Erstellen Sie einen benutzerdefinierten Stream-Wrapper
  2. Registrieren Sie diesen Stream Wrapper mit PHP
  3. Öffnen Sie einen Ressourcen-Stream mit dem registrierten Stream-Wrapper-Schema

Ihr benutzerdefinierter Stream sieht also ungefähr so ​​aus:

%Vor%

Dann würden Sie das in Ihrem Testfall tun:

%Vor%

Dann können Sie einfach die statischen Eigenschaften ändern, die ich im Stream-Wrapper definiert habe, um zu ändern, welche Daten beim Lesen des Streams zurückkommen. Oder erweitern Sie Ihre Basis-Stream-Wrapper-Klasse und registrieren Sie sie stattdessen, um verschiedene Szenarien für Tests bereitzustellen.

Dies ist ein sehr einfaches Intro, aber der Punkt ist folgender: Verwenden Sie vfsStream nur, wenn Sie sich über tatsächliche Dateisystemoperationen lustig machen - dafür ist es gedacht. Schreiben Sie andernfalls einen benutzerdefinierten Stream-Wrapper zum Testen.

PHP bietet eine Prototyp-Wrapper-Klasse für den Einstieg: Ссылка

    
___ tag123unittesting ___ Unit Testing ist eine Methode, bei der einzelne Quellcode-Einheiten auf ihre Tauglichkeit getestet werden. ___ tag123phpunit ___ PHPUnit ist ein Programmierer-orientiertes Testframework für PHP. Es ist eine Instanz der xUnit-Architektur für Unit-Test-Frameworks. ___ answer42519199 ___

Ich habe mit dem Finden einer ähnlichen Antwort gekämpft - ich fand die Dokumentation auch fehlend.

Ich vermute, Ihr Problem war, dass %code% kein Pfad zu einer vorhandenen Datei war (wie %code% immer sein wird.)

Wenn die angenommene Antwort eine akzeptable Antwort ist, dann ist dies das Äquivalent zu vfsStreamWrapper.

%Vor%

Alternativ, wenn Sie dies aufteilen müssen, so dass Sie den Inhalt nach dem Aufruf von %code% definieren, ist dies wie.

%Vor%

Eine weitere Sache, die Sie in Ihrem ursprünglichen Code beachten sollten, ist, dass Sie %code% nicht aufrufen müssen, wenn Sie %code%

verwenden     
___ tag123vfstream ___ vfsStream ist ein Stream-Wrapper für ein virtuelles Dateisystem. ___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___
2
Antworten

Versuch, Dateisystemoperationen mit VFSStream zu testen

Ich versuche, eine Dateisystemoperation (naja, eigentlich eine Lektüre von php: // input) mit vfsStream zu verspotten, aber das Fehlen anständiger Dokumentation und Beispiele behindert mich wirklich. Der relevante Code der getesteten Klasse l...
28.07.2012, 10:57