10 Stimmen

Mock File.Exists Methode in Unit Test (C#)

Mögliches Duplikat:
.NET-Dateisystem-Wrapper-Bibliothek

Ich würde gerne einen Test schreiben, bei dem der Inhalt einer Datei geladen wird. In dem Beispiel ist die Klasse, die zum Laden des Inhalts verwendet wird

FileClass

und die Methode

GetContentFromFile(string path).

Gibt es eine Möglichkeit, sich über die

File.exists(string path)

Methode in dem angegebenen Beispiel mit moq?

Exemple :

Ich habe eine Klasse mit einer solchen Methode:

public class FileClass 
{
   public string GetContentFromFile(string path)
   {
       if (File.exists(path))
       {
           //Do some more logic in here...
       }
   }
}

11voto

csano Punkte 12748

Da die Exists-Methode eine statische Methode der Klasse File ist, können Sie sie nicht nachahmen (siehe Hinweis unten). Der einfachste Weg, dies zu umgehen, besteht darin, einen dünnen Wrapper um die Dateiklasse zu schreiben. Diese Klasse sollte eine Schnittstelle implementieren, die in Ihre Klasse injiziert werden kann.

public interface IFileWrapper {
    bool Exists(string path);
}

public class FileWrapper : IFileWrapper {
    public bool Exists(string path) {
        return File.Exists(path);
    }
}

Dann in Ihrer Klasse:

public class FileClass {
   private readonly IFileWrapper wrapper;

   public FileClass(IFileWrapper wrapper) {
       this.wrapper = wrapper;
   }

   public string GetContentFromFile(string path){
       if (wrapper.Exists(path)) {
           //Do some more logic in here...
       }
   }
}

HINWEIS: TypeMock ermöglicht es Ihnen, statische Methoden zu spiegeln. Andere beliebte Frameworks, z. B. Moq, Rhino Mocks usw., tun dies nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X