如何设计基于XML和可测试的存储库?

时间:2014-06-22 14:00:01

标签: c# unit-testing file-io

我正在编写基于XML的存储库。目前,它是一个基本CRUD操作的单个类。构造函数中传递的参数之一是保存存储库的文件的url

public Repository(string fileUrl, IRepositorySchema schema)

现在我想为这堂课写单元测试。我不想使用真实文件。我做了一些研究,找到了SystemWrapper库,可以帮助我完成这项任务。

真正的问题是,如何更改我的存储库类,以便我可以模拟/存根文件?我应该将文件系统与文件URL一起注入吗?

2 个答案:

答案 0 :(得分:1)

绝对是模拟文件进行测试的好方向。

使用SystemWrapper,您将不再调用System.IO.File静态方法,而是将文件实例作为SystemInterface.IO.IFile传入存储库,并通过它执行所有调用,与存储库模式相同:

public Repository(SystemInterface.IO.IFile file, IRepositorySchema schema)

对于生产,您将使用SystemWrapper提供的SystemWrapper.IO.FileWrap实例,该实验使用System.IO.File实现,为了进行测试,您将提供适合您测试需求的自己的SystemInterface.IO.IFile实现。

答案 1 :(得分:0)

我建议您查看System.IO.Abstractions。看起来它正处于更积极的发展之中。

您可以使用相同的方法。只是构造函数注入IFileSystem。在您的单元测试中,您可以使用您选择的库来模拟它,或者使用随库提供的方便testing helpers