I am trying to mock a WriteConcernResult
returned via an Insert()
;
A WriteConcernResult
is returned by my provider and the Insert()
is called via Add User:
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;
}
The 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;
}
}
Because DocumentsAffected
does not have a setter I am unsure how to set a value my mock will return.
{
var user = new UserModel {Name = "Test"};
_mockMongoProvider = MockRepository.GenerateMock<IMongoProvider>();
//mock writeConcernResult
var result = _repo.AddUser(user);
Assert.That(result, Is.True);
}
With a setter I would likely mock like this:
_mockMongoProvider.Stub(p => p.Insert(user))
.Return(new WriteConcernResult(
new BsonDocument()
).DocumentsAffected = 1);
Any guidance would be very helpful, cheers.
Actually you don't need to mock the WriteConcernResult
class at all.
All you have to do is to initialize an instance of WriteConcernResult
as the following:
var document = new BsonDocument();
document.Add("n", new BsonInt64(1));
var writeConcernResult = new WriteConcernResult(document);
Then you'll have to setup your mock repository to return this instance:
_mockMongoProvider.Stub(p => p.Insert(user))
.Return(writeConcernResult );