Um Ihre spezielle Frage zu beantworten: Nein, es gibt keine Bibliotheken, mit denen Sie Datei-E / A-Aufrufe verspotten können (von denen ich weiß). Dies bedeutet, dass Sie für "ordnungsgemäße" Unit-Tests Ihrer Typen diese Einschränkung berücksichtigen müssen, wenn Sie Ihre Typen definieren.
Kurze Randnotiz darüber, wie ich einen "richtigen" Komponententest definiere. Ich glaube, dass Unit-Tests bestätigen sollten, dass Sie die erwartete Ausgabe erhalten (sei es eine Ausnahme, ein Aufruf einer Methode usw.), sofern bekannte Eingaben vorliegen. Auf diese Weise können Sie Ihre Unit-Test-Bedingungen als eine Reihe von Eingängen und / oder Eingangszuständen einrichten. Der beste Weg, dies zu tun, besteht darin, schnittstellenbasierte Dienste und Abhängigkeitsinjektion zu verwenden, sodass jede Verantwortung außerhalb eines Typs über eine Schnittstelle bereitgestellt wird, die über einen Konstruktor oder eine Eigenschaft übergeben wird.
In diesem Sinne zurück zu Ihrer Frage. Ich habe Dateisystemaufrufe verspottet, indem ich eine IFileSystemService
Schnittstelle zusammen mit einer FileSystemService
Implementierung erstellt habe, die lediglich eine Fassade über die Dateisystemmethoden von mscorlib darstellt. Mein Code verwendet dann IFileSystemService
eher den Typ als den mscorlib-Typ. Auf diese Weise kann ich meinen Standard anschließen, FileSystemService
wenn die Anwendung ausgeführt wird, oder die IFileSystemService
in meinen Komponententests verspotten . Der Anwendungscode ist unabhängig von der Ausführung identisch, aber die zugrunde liegende Infrastruktur ermöglicht das einfache Testen dieses Codes.
Ich werde anerkennen, dass es schwierig ist, den Wrapper um die mscorlib-Dateisystemobjekte zu verwenden, aber in diesen speziellen Szenarien lohnt sich die zusätzliche Arbeit, da das Testen so viel einfacher und zuverlässiger wird.