Почему метод не работает, а в другом методе работает тот же алгоритм?C#

Место общения программистов C#
Ответить
Anonymous
 Почему метод не работает, а в другом методе работает тот же алгоритм?

Сообщение Anonymous »

У меня есть база данных с Entity Framework, использующая шаблон проектирования репозитория. В моем репозитории есть метод, который получает два входа: сущность и коллекцию IQueryable. Алгоритм метода должен возвращать другой объект из коллекции на основе входных данных объекта (для простоты представьте себе приложение для знакомств, где пользователь А получает пользователя Б в качестве рекомендации на основе предпочтений пользователя А).
У меня есть библиотека тестовых классов для тестирования репозитория с использованием nUnit и MOQ. Я правильно настроил макет, чтобы вернуть поддельный список пользователей. а затем я проверил этот метод.
Вот в чем суть. Модульный тест не пройден, поскольку метод репозитория возвращает значение null. Однако если я скопирую и вставлю алгоритм прямо в модульный тест, он вернет правильные данные. В чем дело? Как это возможно? В приведенном ниже коде я прокомментировал правильные и неправильные вещи...
Метод репозитория:
public IUser SearchForDate(IUser entity, IQueryable users)
{
var userPartner = users.Where(x => x.Interested == entity.Male)
.Where(x => x.MinAge < entity.Age)
.Where(x => x.MaxAge > entity.Age)
.Where(x => x.WantToDate == true).FirstOrDefault();

return userPartner;
}

При установке:
this.userRepo.Setup(x => x.GetAllIUsers()).Returns(testUsers);
this.userRepo.Setup(x => x.GetAll()).Returns(testUsers2.AsQueryable());
IUserRepository Repo = this.userRepo.Object;

При модульном тесте:
[TestCase("Andrew", "Angela")]
public void SearchForPartner_ReturnsTheCorrectPartner(string userName, string partnerName)
{
//Assert - Act
var users = Repo.GetAll();
var userNeedsPartner = users.Single(x => x.Nickname == userName); //this return the correct user - Andrew
var partner = Repo.SearchForDate(userNeedsPartner, Repo.GetAll()); //NOT GOOD, WHY????Even if I use users instead of Repo.GetAll() - this mothafucka returns null.

var partnerForUser = Repo.GetAll().Where(x => x.Interested == userNeedsPartner.Male)
.Where(x => x.MinAge < userNeedsPartner.Age)
.Where(x => x.MaxAge > userNeedsPartner.Age)
.Where(x => x.WantToDate == true).FirstOrDefault(); //GOOD, WHY??? - This returns the correct user - Angela

//Arrange
Assert.That(partner.Nickname, Is.EqualTo(partnerName)); //NULLReferenceException...
}


Подробнее здесь: https://stackoverflow.com/questions/583 ... thod-works
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»