我正在使用 .NET Core 2.0 和 .NET Core MongoDB 驱动程序。
我创建了一个像这样的存储库:
public interface IRepository<T>
{
IMongoQueryable<T> Get()
}
我这样做是为了给使用它的人提供灵活性,让他们能够像使用 EF 一样执行 LINQ。问题是当涉及到单元测试时,我正在尝试创建一个内存数据库,以便我可以检查操作之前和之后的状态。
我尝试过的一些东西:
public class InMemoryRepository : IRepository<ConcreteType>
{
private HashSet<ConcreteType> _data = new HashSet<ConcreteType>();
public IMongoQueryable<ConcreteType> Get()
{
return (IMongoQueryable<ConcreteType>)_data.AsQueryable();
}
}
该案例不能作为接口使用IMongoQueryable
is:
public interface IMongoQueryable<T> : IMongoQueryable, IQueryable, IEnumerable, IQueryable<T>, IEnumerable<T>, IAsyncCursorSource<T>
另一个去:
public class InMemoryRepository : IRepository<ConcreteType>
{
private HashSet<ConcreteType> _data = new HashSet<ConcreteType>();
public InMemoryRepository()
{
_mongoQueryableMock = new Mock<IMongoQueryable<ConcreteType>>();
_mongoQueryableMock.Setup(m => m.AsQueryable()).Returns(_data.AsQueryable);
}
public IMongoQueryable<ConcreteType> Get()
{
return _mongoQueryableMock.Object;
}
}
这不起作用IMongoQueryable.AsQueryable()
是一种扩展方法,我无法模拟/设置它。