我正在对MongoDB C#驱动程序的包装器进行单元测试。我有这行代码:
Collection.Find(predicate).ToListAsync();
其中
Collection
是IMongoCollection<T>
类型,而Find(predicate)
返回实现IFindFluent<T, T>
的实例。我假设ToListAsync()
是将结果转换为列表的扩展。我正在尝试编写单元测试,而在处理这个问题上我陷入了困境。我无法制作包装器类,因为这就是我正在研究的内容。我希望这样做,以便
ToListAsync()
返回创建的列表,或者模拟Find()
返回可以作为列表的内容。 最佳答案
如果有人想让它工作起来会很费力,那么我模仿Find()
方法的工作是:
[TestFixture]
class QueryControllerTests
{
private IOptions<MongoSettings> _mongoSettings;
private QueryController _queryController;
private Mock<IFakeMongoCollection> _fakeMongoCollection;
private Mock<IFindFluent<BsonDocument, BsonDocument>> _fakeCollectionResult;
[OneTimeSetUp]
public void Setup()
{
_fakeMongoCollection = new Mock<IFakeMongoCollection>();
_fakeCollectionResult = new Mock<IFindFluent<BsonDocument, BsonDocument>>();
}
}
其中
IFakeMongoCollection
是:public interface IFakeMongoCollection : IMongoCollection<BsonDocument>
{
IFindFluent<BsonDocument, BsonDocument> Find(FilterDefinition<BsonDocument> filter, FindOptions options);
}