MongoDB WriteConcernResult 怎么能被嘲笑

本文关键字:怎么能 WriteConcernResult MongoDB | 更新日期: 2023-09-27 18:34:35

我试图模拟通过Insert()返回的WriteConcernResult;

我的提供程序返回一个WriteConcernResult,并通过添加用户调用Insert()

private readonly IMongoProvider _repository;
public UserRepository(IMongoProvider repository)
{
    _repository = repository.ForCollection("User");
}
public bool AddUser(UserModel user)
{
    var result = _repository.Insert(user);
    return result.DocumentsAffected > 0;
}

MongoDB WriteConcernResult类:

public WriteConcernResult(BsonDocument response)
{
    _response = Ensure.IsNotNull(response, nameof(response));
}
public long DocumentsAffected
{
    get
    {
        BsonValue value;
        return _response.TryGetValue("n", out value) ? value.ToInt64() : 0;
    }
}

因为DocumentsAffected没有二传手,所以我不确定如何设置我的模拟将返回的值。

{
    var user = new UserModel {Name = "Test"};
    _mockMongoProvider = MockRepository.GenerateMock<IMongoProvider>();
     //mock writeConcernResult
     var result = _repo.AddUser(user);
     Assert.That(result, Is.True);
}

对于二传手,我可能会像这样嘲笑:

_mockMongoProvider.Stub(p => p.Insert(user))
                  .Return(new WriteConcernResult(
                                                    new BsonDocument()
                                                ).DocumentsAffected = 1);

任何指导都会非常有帮助,干杯。

MongoDB WriteConcernResult 怎么能被嘲笑

实际上你根本不需要嘲笑WriteConcernResult类。

您所要做的就是初始化WriteConcernResult的实例,如下所示:

var document = new BsonDocument();
document.Add("n", new BsonInt64(1));
var writeConcernResult = new WriteConcernResult(document);

然后,您必须设置模拟存储库以返回此实例:

_mockMongoProvider.Stub(p => p.Insert(user))
                  .Return(writeConcernResult );