У меня есть метод с именем SearchUser, который я хочу провести модульное тестирование с использованием NSubStitute. и этот метод содержит метод Find, который возвращает IFindFluent, который я не могу вернуть при замене метода Find (). Это содержит UserRepository.Find (FilterDefination f); Я получаю результат подсчета 0.
Код теста:
[Fact]
public void SearchUser_InputWithWhiteSpace()
{
var input = "ABC ";
var fluentUserSearch = Substitute.For<IFindFluent<User, UserSearch>>();
var mongoCollection = Substitute.For<IMongoCollection<User>>();
var fluent = Substitute.For<IFindFluent<User, User>>();
var ff = Substitute.For<IFindFluent<User, User>>();
var cursorMock = Substitute.For<IAsyncCursor<User>>();
var cursorMockUserSearch = Substitute.For<IAsyncCursor<UserSearch>>();
ff.Limit(10).Returns(fluent);
ff.Project(Arg.Any<ProjectionDefinition<User, UserSearch>>()).Returns(fluentUserSearch);
cursorMock.Current.Returns(GetMockData(input));
fluent.ToCursor().Returns(cursorMock);
cursorMock.MoveNext().Returns(true);
cursorMockUserSearch.Current.Returns(GetMockDataUserSearch(input));
fluentUserSearch.ToCursor().Returns(cursorMockUserSearch);
cursorMockUserSearch.MoveNext().Returns(true);
//var fakefluent = new FakeFindFluent<User>(GetMockData(input));
UserIRepository.Find(Arg.Any<FilterDefinition<User>>()).Returns(ff);
var result = userMongoRepository.SearchUser(input);
Assert.NotNull(result);
}
Фактический метод для проверки:
public IEnumerable<UserSearch> SearchUser(string searchChars)
{
return UserRepository.Find(filter).Project<UserSearch>(projection).Limit(10).ToList();
}