Как объединить тест, используя метод NSubstitute Find, который возвращает IFndFluent и имеет Обернутую находку Mongodb. c# - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть метод с именем 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();
        }
...