Как протестировать удаление объекта в JUnit?

126
22 ноября 2019, 23:20

нужно протестировать функцию Food eat() в JUnit: убедится в том, что функция всё же удалила объект из списка.

import java.util.ArrayList;
    /**
     * Класс Человек
     */
    class Human {
        /** Имя человека*/
        private String name;
        /**
         * Конструктор по умолчанию
         */
        Human() {
            name = "";
        }
        /**
         * Конструктор с параметрами
         * @param name имя человека
         */
        Human (String name) {
            this.name = name;
        }
        /**
         * Сетер имени человека
         * @param n имя человека
         */
        void setName(String n) {
            name = n;
        }
        /**
         * @return имя человека
         */
        String getName() {
            return name;
        }
        /**
         * Метод "кушания". Удаляет блюдо из списка
         * @param foods список блюд
         * @return блюдо
         */
        Food eat(ArrayList<Food> foods) {
            Food f = foods.get(foods.size()-1);
            foods.remove(foods.size()-1);
            return f;
        }
    }
Answer 1
public class HumanTest {
    List<Food> list;
    @Before
    public void prepareList(){
        list = new ArrayList<>();
        list.add(new Food("meat"));
        list.add(new Food("fruits"));
        list.add(new Food("fish"));
    }
    @Test
    public void eatReturnLastFoodFromList() {
    }
    @Test
    public void eatRemovLastFoodFromList() {
        Human h = new Human();
        h.eat(list);
        assertFalse(list.contains(new Food("fish")));
        assertTrue(list.size() == 2);
    }
}
Answer 2

Во-первых, метод eat() можно упростить:

Food eat(ArrayList<Food> foods) {
        return foods.remove(foods.size() - 1);
}

Тест очень простой, если ссылки на объекты Food не повторяются в вашем списке (т.е. один и тот же объект не добавлен два раза в список). Нужно проверить, что размер списка уменьшился на единицу, что съеден именно последний объект, что съеденный объект больше не в списке:

@BeforeMethod
public void setUp() {
    //prepare foodList and human objects
}
@Test
public static void testEatMethod() {
    int size = foodList.size();
    Food foodToBeDeleted = foodList.get(foodList.size() - 1);
    Food foodDeleted = human.eat(foodList);
    assertEquals(foodDeleted, foodToBeDeleted);
    assertEquals(foodList.size(), size - 1);
    assertFalse(foodList.contains(foodToBeDeleted));
}
READ ALSO
Как указать файл для логирования во время runtime?

Как указать файл для логирования во время runtime?

Я пользуюсь log4j и мне нужно указать файл для логирования во время runtimeПодскажите пожалуйста как мне это сделать

99
Как получить метаданные из mp3 файлов?

Как получить метаданные из mp3 файлов?

Я считываю *mp3 файлы но покуда только по именам, как еще добавить сюда вывод альбома, длительности и путь непосредственно к файлу

131
Frontpad api java

Frontpad api java

Я слышал, что у frontpad есть apiМне нужно через Java подключиться к frontpad и отправлять с мобильного приложения заказы

113
Конвертирование String в функцию java.util.function

Конвертирование String в функцию java.util.function

Вот фрагмент кода в котором задан конструктор, принимающий функциональный интерфейс, принимающий и возвращающий DoubleМожно вместо параметра...

121