Wie verspotten Sie das Dateisystem in C# für Unit-Tests?

Wie verspotten Sie das Dateisystem in C# für Unit-Tests?

Bearbeiten:Installieren Sie das NuGet-Paket System.IO.Abstractions .

Dieses Paket existierte nicht, als diese Antwort ursprünglich akzeptiert wurde. Die ursprüngliche Antwort wird für den historischen Kontext unten bereitgestellt:


Diese imaginäre Bibliothek existiert, gibt es ein NuGet-Paket für System.IO.Abstractions, das den System.IO-Namespace abstrahiert.

Es gibt auch eine Reihe von Testhelfern, System.IO.Abstractions.TestingHelpers, die zum Zeitpunkt des Schreibens nur teilweise implementiert sind, aber einen sehr guten Ausgangspunkt darstellen.


Sie müssen wahrscheinlich einen Vertrag erstellen, um zu definieren, welche Dinge Sie vom Dateisystem benötigen, und dann einen Wrapper um diese Funktionalitäten schreiben. An diesem Punkt könnten Sie die Implementierung verspotten oder ausblenden.

Beispiel:

interface IFileWrapper { bool Exists(String filePath); }

class FileWrapper: IFileWrapper
{
    bool Exists(String filePath) { return File.Exists(filePath); }        
}

class FileWrapperStub: IFileWrapper
{
    bool Exists(String filePath) 
    { return (filePath == @"C:\myfilerocks.txt"); }
}