Задать вопрос

Юнит-тест для метода, возвращающего список объектов

Есть сервисный класс, в нем есть методы, которые возвращают список объектов по какому либо критерию, например:

public class PersonService { public List<Person> findAll(){ ... return ...; } ... }

Как правильно(грамотно) написать юнит тест для такого метода? А именно:
1. Как сравниваются два списка объектов (тестируемый и эталонный), в junit насколько я понимаю такого изкаробки нет. Причем с учетом сортировки объектов, в одном случае она может быть важна, в другом нет.
2. Как определить и заполнить эталонный список объектов? Т.е. прямо жестко закодить наполнение списка статикой? Тогда код потеряет читаемость. Либо хранить в файле и грузить в список? Как принято?
  • Вопрос задан
  • 4606 просмотров
Подписаться 4 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Lavir_the_Whiolet
1. Я бы сравнил поэлементно. Например, так (псевдокод):
result := PersonService.findAll(...);
ref := <эталонные объекты>
assert(result.getSize() == ref.getSize());
for (it1 = result.iterator(), it2 = ref.iterator(); it1.hasNext();) {
    assert(it1.next().equals(it2.next()));
}

Если порядок не важен, то оба списка перед этим сортируются.

2. Жёстко закодить наполнение списка статикой. Решение «грузить из файла» — это, по сути, то же самое, только создание эталонных объектов пишется на другом языке (языке формата внешнего файла). Вы хотите разработать новый формат данных, написать для него парсер, интегрировать его в Junit и описать эталонные объекты на нем, или всё-таки выгоднее будет описать эталонные объекты на Java?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы