使用Moq在C#中对特定MongoDb过滤器定义进行单元测试

使用Moq在C#中对特定MongoDb过滤器定义进行单元测试,c#,mongodb,unit-testing,moq,C#,Mongodb,Unit Testing,Moq,正在尝试在C#中对以下MongoDb更新函数进行单元测试 var update=Builders.update .Set(x=>x.EmailAddress,command.EmailAddress); 等待this.myDatabase.Users .updateOneSync(x=>x.UserId==UserId),更新) .配置等待(错误); 我可以很容易地检查是否使用通用筛选器调用此函数: this.mockCollection .Verify(x => x.Updat

正在尝试在C#中对以下MongoDb更新函数进行单元测试

var update=Builders.update
.Set(x=>x.EmailAddress,command.EmailAddress);
等待this.myDatabase.Users
.updateOneSync(x=>x.UserId==UserId),更新)
.配置等待(错误);
我可以很容易地检查是否使用通用筛选器调用此函数:

this.mockCollection
    .Verify(x => x.UpdateOneAsync(It.IsAny<FilterDefinition<MyDao>>(), 
        It.IsAny<UpdateDefinition<MyDao>>(), 
        It.IsAny<UpdateOptions>(), 
        It.IsAny<CancellationToken>()));
this.mockCollection
.Verify(x=>x.UpdateOneAsync(It.IsAny()),
It.IsAny(),
It.IsAny(),
It.IsAny());
但是,我想尝试验证是否使用预期参数调用它。我似乎找不到从FilterDefinition提取要检查的参数的方法。我试过这个:

var foo = Builders<MyDao>.Filter.Eq("UserId", expectedUserId);
this.mockCollection
    .Verify(x => x.UpdateOneAsync(It.Is<FilterDefinition<MyDao>>(a => a == foo), 
        It.IsAny<UpdateDefinition<MyDao>>(), 
        It.IsAny<UpdateOptions>(), 
        It.IsAny<CancellationToken>()));
var foo=Builders.Filter.Eq(“UserId”,expectedUserId);
这是我的收藏
.Verify(x=>x.UpdateOneAsync)(It.Is(a=>a==foo),
It.IsAny(),
It.IsAny(),
It.IsAny());

但是测试表明调用没有执行。我做错了什么?

看来您可以通过使用“渲染”来近似此处所需的内容

var serializerRegistry = BsonSerializer.SerializerRegistry;
var documentSerializer = serializerRegistry.GetSerializer<MyDao>();
var expectedFilter = Builders<MyDao>.Filter.Eq("UserId", existingInvestor2.InvestorId);

this.mockCollection
    .Verify(x => x.UpdateOneAsync(It.Is<FilterDefinition<MyDao>>(a => a.Render(documentSerializer, serializerRegistry) == expectedFilter.Render(documentSerializer, serializerRegistry)), 
        It.IsAny<UpdateDefinition<MyDao>>(), 
        It.IsAny<UpdateOptions>(), 
        It.IsAny<CancellationToken>()));
var serializerRegistry=BsonSerializer.serializerRegistry;
var documentSerializer=serializerRegistry.GetSerializer();
var expectedFilter=Builders.Filter.Eq(“UserId”,existingInvestor2.InvestorId);
这是我的收藏
.Verify(x=>x.UpdateOneAsync(It.Is(a=>a.Render(documentSerializer,serializerRegistry)==expectedFilter.Render(documentSerializer,serializerRegistry)),
It.IsAny(),
It.IsAny(),
It.IsAny());
var serializerRegistry = BsonSerializer.SerializerRegistry;
var documentSerializer = serializerRegistry.GetSerializer<MyDao>();
var expectedFilter = Builders<MyDao>.Filter.Eq("UserId", existingInvestor2.InvestorId);

this.mockCollection
    .Verify(x => x.UpdateOneAsync(It.Is<FilterDefinition<MyDao>>(a => a.Render(documentSerializer, serializerRegistry) == expectedFilter.Render(documentSerializer, serializerRegistry)), 
        It.IsAny<UpdateDefinition<MyDao>>(), 
        It.IsAny<UpdateOptions>(), 
        It.IsAny<CancellationToken>()));