Ich bin mir nicht sicher über bestimmte Frameworks, aber ein allgemeiner Ansatz in Bezug auf OOP wäre, einige abstrahierte Ebenen über jeden Dateizugriffscode (Schnittstellen in Hülle und Fülle!) und möglicherweise eine Fassade zu schreiben, um die Verwendung gängiger Operationen zu vereinfachen. Dann verspotten Sie nur eine Ebene unter dem Code, den Sie gerade testen, und es handelt sich dann im Wesentlichen um ein gefälschtes Dateisystem (oder zumindest der Code, den Sie testen, weiß nichts anderes).
Wenn Sie ein Abhängigkeitsinjektionsframework verwenden möchten, um dies für Sie zu erledigen, wird es die Möglichkeit erleichtern, Komponenten für eine gefälschte Implementierung einer Schnittstelle auszutauschen. Wenn Sie den Mustern der Umkehrung der Steuerung folgen und Abhängigkeiten an den Konstruktor der Klasse übergeben, die Sie testen, wird dies auch zum einfachen Testen.
public interface IFileSystem {
IFileHandle Load(string path);
//etc
}
public class ClassBeingTested {
public ClassBeingTested(IFileSystem fileSystem) {
//assign to private field
}
public void DoSomethingWithFileSystem() {
//utilise interface to file system here
//which you could easily mock for testing purposes
//by passing a fake implementation to the constructor
}
}
Ich hoffe, mein Java ist korrekt, ich habe Java schon lange nicht mehr geschrieben, aber Sie werden hoffentlich den Drift bekommen. hoffentlich unterschätze ich das Problem hier nicht und bin zu simpel!
Dies setzt natürlich voraus, dass Sie echte Unit-Tests meinen, dh das Testen der kleinstmöglichen Code-Einheiten und nicht eines ganzen Systems. Für Integrationstests ist ein anderer Ansatz erforderlich.