Je construis un moteur de blog pour tester certains concepts tels que TDD et en utilisant l'inversion de contrôle ... J'ai trouvé une configuration où j'aurais une interface générique IBlogRepository pour que je puisse supporter à la fois SQL et XML.Comment utiliser IoC dans une configuration comme celle-ci? Y a-t-il une meilleure façon de tester cela?
public interface IBlogRepository : IRepository
{
Post GetPostById(Guid postId);
Post GetPostByFriendlyUrl(string friendlyUrl);
List<Post> GetPostsByAuthor(string userName);
List<Post> GetPostByTags(params string[] tags);
List<Author> Authors { get; }
void Delete(Post post);
void Delete(Comment comment);
void Save(Post post);
void Save(Comment comment);
}
Le problème est le référentiel XML a besoin différentes ressources que la base de données que l'on fait ... voici le constructeur:
public XmlBlogRepository(string dataPath, IFileReader fileReader, IDirectoryReader directoryReader, ILogger logger)
{
this.dataPath = dataPath;
this.fileReader = fileReader;
this.directoryReader = directoryReader;
this.Logger = logger;
}
FileReader, directoryReader et dataPath ne sont pas nécessaires par le dépôt de Blog SQL . Ceci rend la question de l'inversion du contrôle pour charger IBlogRepository impossible et rend également très difficile l'utilisation générique car ils ont des cteurs complètement différents.
La raison pour laquelle je dois les transmettre est parce que si je viens d'utiliser File.Open/Directory.GetFiles, je ne serais pas en mesure de tester la classe sans avoir des fichiers XML sur le disque dur.
quel outil utilisez-vous pour le tester? –