У меня есть база данных с 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
Почему метод не работает, а в другом методе работает тот же алгоритм? ⇐ C#
Место общения программистов C#
1736615894
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...
}
Подробнее здесь: [url]https://stackoverflow.com/questions/58366491/why-the-method-doesnt-work-however-the-same-algorithm-in-another-method-works[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия