我正在尝试做 tdd 并使用 mongodb 作为数据库。但我无法解决模拟 mongodb 的问题。是否有能力模拟 mongodb 以在 .NET 中进行单元测试?
更新
我发现非常好的解决方案阅读博客。 你可以找到它here :
最佳答案
您应该在在 MongoDB 之上模拟一个层,而不是模拟 MongoDB。
您可能需要考虑一个接口(interface),该接口(interface)公开您的存储库上的操作,这些操作与底层数据存储无关。例如,您可能需要一个抽象出 Student
类型操作的接口(interface),如下所示:
public interface IStudentOperations
{
void Add(Student student);
}
当您创建其他依赖项时,您会注入(inject)上述接口(interface)的实例,或者您选择的任何更高级别的抽象。
重点是,不要直接暴露MongoDB。
一旦你这样做了,你就可以模拟你创建的所有你想要的接口(interface),有一个实现来测试模拟实现,然后一个实际的实现带有它自己的测试来验证实现上的操作是正确的,当底层使用 MongoDB 实现。
虽然肯定是 possible to mock most of MongoDB's classes (as the methods are virtual
) ,您获得了与持久性无关的好处;如果你想切换到 CouchDB 或 elasticsearch,你不必改变对这些接口(interface)的调用,你只需创建一个新的实现。
因为 you are trying to test the implementation of the repository ,那么你一般就可以了,前面已经说了,MongoDB的大部分函数都是virtual
,对大部分mocking库都很友好。
也就是说,您必须确保将 MongoDatabase
into 您的存储库(而不是在存储库中创建它)这样在您的单元测试中,您可以创建适当的模拟,然后将其传递到您的存储库实现中进行测试。
关于c# - .NET 中的 Mongodb 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804662/