Ceci est probablement fou.Passer des classes système en tant que paramètres constructeurs
Je veux pousser l'idée de l'injection de dépendance à l'extrême. J'ai isolé tous les comportements liés à System.IO dans une seule classe afin que je puisse se moquer de cette classe dans mes autres classes et ainsi soulager ma plus grande suite de tests unitaires du fardeau de s'inquiéter du système de fichiers réel. Mais le fichier IO de classe I ne peut être testé qu'avec des tests d'intégration, ce qui - bien sûr - introduit une complexité que je ne veux pas vraiment traiter lorsque tout ce que je veux vraiment faire est de m'assurer La classe FileIO appelle les éléments System.IO corrects. Je n'ai pas besoin de tester l'intégration System.IO. Ma classe FileIO fait plus que simplement encapsuler des fonctions System.IO, de temps en temps elle contient de la logique (peut-être est-ce le problème?).
Donc ce que je voudrais, c'est pouvoir tester ma classe d'E/S de fichiers pour m'assurer qu'elle fait les bons appels système en se moquant des classes System.IO elles-mêmes. Idéalement, ce serait aussi facile que d'avoir un constructeur comme ceci:
public FileIO(
System.IO.Directory directory,
System.IO.File file,
System.IO.FileStream fileStream
)
{
this.Directory = directory;
this.File = file;
this.FileStream = fileStream;
}
Et puis faire appel à des méthodes telles que:
public GetFilesInFolder(string folderPath)
{
return this.Directory.GetFiles(folderPath)
}
Mais cela ne vole pas puisque les classes System.IO en question sont statiques Des classes. Autant que je sache, ils ne peuvent être instanciés de cette manière ou sous-classés dans le but de se moquer.