Unit-Testcode, der mit dem Dateisystem interagiert, erfordert ein Mock-Testen des Dateisystems, um Tests von der tatsächlichen Datei zu isolieren Systemoperationen. Dieser Artikel enthält ein Beispiel für die Verwendung einer Schnittstelle und simulierter Typen, um mit dem Dateisystem interagierende Funktionen in Go effektiv zu testen.
Die bereitgestellte Lösung verwendet eine Schnittstelle, fileSystem, um Dateisystemvorgänge darzustellen . Die konkrete Implementierung, osFS, übernimmt die tatsächlichen Dateioperationen in der Produktion. Um Code zu testen, der auf osFS basiert, müssen wir eine simulierte Version namens „mockedFS“ erstellen, die fileSystem erbt, aber das Verhalten von Dateivorgängen während des Tests steuert.
Zur Verspottung Für die von fs.Stat() zurückgegebene os.FileInfo-Schnittstelle erstellen wir einen MockedFileInfo-Typ, der os.FileInfo einbettet und die erforderlichen Methoden überschreibt. Dadurch können wir die von Stat() gemeldete Größe steuern.
Um Code mit dem simulierten Dateisystem zu testen, ersetzen wir vorübergehend die globale fs-Variable durch eine Instanz von mockedFS . Dadurch werden effektiv alle Dateisystemoperationen abgefangen, die von der getesteten Funktion ausgeführt werden.
Die bereitgestellte Beispielfunktion getSize() gibt die Größe einer Datei oder einen Fehler zurück, wenn Stat() fehlschlägt. Um diese Funktion vollständig zu testen, verwenden wir „mockedFS“, um das Verhalten von Stat() zu steuern:
Die Testfälle überprüfen, ob die Funktion sowohl das Fehler- als auch das Erfolgsszenario korrekt behandelt.
Durch die Verwendung einer Schnittstelle und verspotteter Typen Wir können das Dateisystem während des Unit-Tests in Go leicht nachahmen. Dadurch können wir den getesteten Code von externen Abhängigkeiten isolieren und zuverlässige Testergebnisse gewährleisten.
Das obige ist der detaillierte Inhalt vonWie kann man das Dateisystem für Unit-Tests in Go effektiv verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!