.NET中的Mongodb单元测试

F0r*_*gan 10 .net c# unit-testing mocking mongodb

我想做tdd并使用mongodb作为数据库.但我无法解决嘲弄mongodb的问题.有没有能力在.NET中模拟mongodb进行单元测试?


更新

我找到了很好的阅读博客.你可以在这里找到它:

cas*_*One 14

您应该在MongoDB 之上模拟一个层,而不是模拟MongoDB.

您可能需要考虑一个接口,该接口公开存储库上与底层数据存储无关的操作.例如,您可能需要一个抽象出Student类型操作的接口,如下所示:

public interface IStudentOperations
{
    void Add(Student student);
}
Run Code Online (Sandbox Code Playgroud)

当您创建其他依赖项时,您将注入上述接口的实例,或者您选择的更高级别的抽象.

关键是,不要直接暴露MongoDB .

一旦你这样做,你可以模拟你想要创建的接口,有一个实现用于测试模拟实现,然后是一个实际的实现与它自己的测试,以验证实现的操作是正确的,当底层实现是MongoDB的.

尽管可以模拟MongoDB的大多数类(如方法所示virtual),但您可以获得持久性不可知的好处; 如果你想切换到说,CouchDB或elasticsearch,你不必更改对这些接口的调用,你只需创建一个新的实现.


因为您正在尝试测试存储库的实现,所以您通常很好,如前所述,MongoDB的大部分功能都是virtual,这对大多数模拟库都很友好.

也就是说,您必须确保将其传递MongoDatabase 存储库(而不是存储库中创建),以便在单元测试中,您可以创建相应的模拟,然后将其传递到存储库实现中进行测试.

  • @ F0rc0sigan对不起,Stack Overflow不是代码编写服务.您还没有说明您想要模拟的方法,您尝试过的方法,或者您正在使用的模拟库.没有足够的信息甚至开始尝试给你一个样本. (4认同)