C# 如何转换IQueryable<;T>;收集到IMongoQueryable<;T>;?
我需要创建一个MongoDB存储库模拟。在我的存储库中有一个方法返回一个C# 如何转换IQueryable<;T>;收集到IMongoQueryable<;T>;?,c#,mongodb,mocking,C#,Mongodb,Mocking,我需要创建一个MongoDB存储库模拟。在我的存储库中有一个方法返回一个IMongoQueryable。我不知道如何创建实现此接口的对象 我真的需要嘲笑这种方法。我查看了IMongoQueryable,看到有一个IQueryable界面,看: public interface IMongoQueryable<T> : IMongoQueryable, IQueryable<T>, IAsyncCursorSource<T> 公共接口IMongoQueryab
IMongoQueryable
。我不知道如何创建实现此接口的对象
我真的需要嘲笑这种方法。我查看了IMongoQueryable
,看到有一个IQueryable
界面,看:
public interface IMongoQueryable<T> : IMongoQueryable, IQueryable<T>, IAsyncCursorSource<T>
公共接口IMongoQueryable:IMongoQueryable、IQueryable、iSyncurSource
我想我可以在对象列表的基础上创建一个MongoDB集合,但我没有创建一个实例。如果我创建了MongoCollection
的一个实例,可能会调用AsQueryable
方法来返回imongqueryable
对象
有人有这样做的想法吗?当我遇到这个问题时,我只需打开Moq的严格模拟,然后继续运行测试模拟方法,直到它停止抛出有关接口的异常为止
var mock = new Mock<IMongoQueryable<Foo>>(MockBehavior.Strict);
//add setup here as you run in to exceptions.
var mockInstance = mock.Object;
var mock=new mock(MockBehavior.Strict);
//在运行到异常时在此处添加安装程序。
var mockInstance=mock.Object;
你说得对。您需要调用AsQueryable
,但需要从命名空间调用一个:MongoDB.Driver.Linq.
要访问它,请执行以下操作:
using MongoDB.Driver.Linq;
PS如果在同一个文件中使用System.Linq
,请务必小心。您将遇到扩展方法冲突
希望有帮助 我试图实现一个解决方案,但没有实现
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);
var-dataQueryable=data.AsQueryable();
_MongoQueryAllemock=新模拟(MockBehavior.Strict);
_Setup(r=>r.GetEnumerator()).Returns(data.GetEnumerator());
_Setup(r=>r.Provider).Returns(dataQueryable.Provider);
_Setup(r=>r.ElementType).Returns(dataQueryable.ElementType);
_Setup(r=>r.Expression).Returns(dataQueryable.Expression);
我将我的列表转换为queryable anf,然后将此列表设置为mock。但是当执行wuery时,没有任何数据
可能有什么问题我想在一些查询中使用一个集合,因为它们非常复杂。在这种情况下,如何设置返回该集合?