我正在对MongoDB C#驱动程序的包装器进行单元测试。我有这行代码:

Collection.Find(predicate).ToListAsync();

其中CollectionIMongoCollection<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);
}

10-08 02:40