Если имитировать, как бы я протестировал метод, чтобы получить объект по его имени, поскольку фиктивный объект не содержит параметров?
Вы можете посмеяться над вызовомgetName
, используя mockito, например:
Citizen citizen = mock(Citizen.class);
when(citizen.getName()).thenReturn("Bob");
Вот пример теста для вашего метода
ProcessClass processClass = new ProcessClass();
Citizen citizen1 = mock(Citizen.class);
Citizen citizen2 = mock(Citizen.class);
Citizen citizen3 = mock(Citizen.class);
@Test
public void getByName_shouldReturnCorrectCitizen_whenPresentInList() {
when(citizen1.getName()).thenReturn("Bob");
when(citizen2.getName()).thenReturn("Alice");
when(citizen3.getName()).thenReturn("John");
processClass.addCitizen(citizen1);
processClass.addCitizen(citizen2);
processClass.addCitizen(citizen3);
Assert.assertEquals(citizen2, processClass.getByName("Alice"));
}
@Test
public void getByName_shouldReturnNull_whenNotPresentInList() {
when(citizen1.getName()).thenReturn("Bob");
processClass.addCitizen(citizen1);
Assert.assertNull(processClass.getByName("Ben"));
}
Примечание:
Я бы порекомендовал издеваться.Допустим, вы пишете 100 тестов, в которых вы создаете экземпляр класса Citizen
таким образом
Citizen c = new Citizen();
, и через несколько месяцев ваш конструктор изменится на аргумент, который представляет собой сам объект, класс City
дляпример.Теперь вам нужно вернуться и изменить все эти тесты и написать:
City city = new City("Paris");
Citizen c = new Citizen(city);
Если вы начали издеваться над Citizen
, вам не нужно это делать.
Теперь, как этоявляется POJO, и его конструктор метода getName может не измениться, но без насмешек все равно должно быть в порядке.