我需要创建一个MongoDB存储库mock。有一种方法可以在我的存储库中返回IMongoQueryable<T>
。我不知道如何创建实现此接口的对象。
我真的需要这种方法嘲笑。我看了IMongoQueryable
,我看到有一个IQueryable
界面,看看:
public interface IMongoQueryable<T> : IMongoQueryable, IQueryable<T>, IAsyncCursorSource<T>
我认为我可以在对象列表上创建一个MongoDB集合,但是我也没有创建它的实例。如果我创建MongoCollection
的实例,我可能会调用AsQueryable
方法返回IMongoQueryable
个对象。
有人有想法这样做吗?
答案 0 :(得分:2)
当我遇到这个问题时,我只是对Moq进行严格的模拟,然后我继续运行测试模拟方法,直到它停止抛出有关接口的异常。
var mock = new Mock<IMongoQueryable<Foo>>(MockBehavior.Strict);
//add setup here as you run in to exceptions.
var mockInstance = mock.Object;
答案 1 :(得分:2)
AsQueryable
调用MongoDB.Driver.Linq.
要访问它,请写:
using MongoDB.Driver.Linq;
如果在同一个文件中使用System.Linq
,请务必小心。您将遇到扩展方法冲突。
希望它有所帮助!
答案 2 :(得分:1)
我尝试实施解决方案,但事实并非如此。
var dataQueryable = data.AsQueryable();
_mongoQueryableMock = new Mock<IMongoQueryable<T>>(MockBehavior.Strict);
_mongoQueryableMock.Setup(r => r.GetEnumerator()).Returns(data.GetEnumerator());
_mongoQueryableMock.Setup(r => r.Provider).Returns(dataQueryable.Provider);
_mongoQueryableMock.Setup(r => r.ElementType).Returns(dataQueryable.ElementType);
_mongoQueryableMock.Setup(r => r.Expression).Returns(dataQueryable.Expression);
我将我的列表转换为可查询的anf,然后将此列表设置为mock。但是当执行wuery时,没有任何数据。
可能有什么问题