MongoDB WriteConcernResult 怎么会被嘲笑呢?

How can MongoDB WriteConcernResult Be mocked?

我正在尝试通过 Insert();

模拟 WriteConcernResult returned

A WriteConcernResult 由我的提供商 return 编辑,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 class:

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 没有 setter 我不确定如何设置我的模拟值 return。

{
    var user = new UserModel {Name = "Test"};

    _mockMongoProvider = MockRepository.GenerateMock<IMongoProvider>();

     //mock writeConcernResult

     var result = _repo.AddUser(user);
     Assert.That(result, Is.True);
}

有了 setter 我可能会这样嘲笑:

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

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

实际上你根本不需要模拟 WriteConcernResult class。

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

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

然后您必须将您的模拟存储库设置为 return 这个实例:

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