Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Как протестировать метод, который меняет буквы в слове?

#java #юнит_тесты


Начал вникать в unit test, потренировался на всяких простых арифметических операциях,
все понятно.
Есть конкретный метод который меняет буквы в слове:

private static char[] exchangeCharInWord(char[] charArray, int first, int last ){
        char tmp;
        tmp=charArray[first]; 
        charArray[first]=charArray[last]; 
        charArray[last]=tmp;
        return charArray;
    }


никак не могу понять что мне здесь проверять.Вот начал писать...

public class TestMyClass {

    @Test
    public void test() {
        MyClass c = new MyClass();
        char[] word = {'h', 'e', 'l', 'o'};
        int first = 0;
        int last = word.length-1;

    }
}

    


Ответы

Ответ 1



Необходимо выделить возможные входные данные метода и результаты работы метода с этими данными. Например, такие тесты: Тест метода на корректных данных (проверяем, что метод правильно меняет местами символы массива): public void validInput_shouldSwap() {...} Тест метода при отрицательных значениях индексов (индекса): public void negativeIndex_shouldThrow() {...} Тест метода, если индексы выходят за границы массива: public void outOfBoundIndexValues_shouldThrow() {...} В зависимости от реализации метода 2 и 3 тесты можно объединить в один. Соответственно внутри каждого теста проверяете результаты работы метода с ожидаемыми.

Ответ 2



Немного обобщу ответ от Pavel Parshin. Для практически любого метода должны быть юнит-тесты нескольких типов: Проверить, что метод корректно работает с корректными входными данными. В вашем случае -- действительно меняет символы в позициях first и last местами. Проверить "угловые случаи". В вашем случае -- когда значения first и last совпадают. Строка при этом измениться не должна. Проверить работу метода с некорректными данными. В вашем случае -- когда один из индексов (или оба) выходят за пределы массива. Обычно метод должен падать с исключением типа ArgumentException. Второй случай может вам "подсказать" добавить проверку: если индексы совпадают, то можно просто выйти из метода. Третий случай выявляет одно из преимуществ написания тестов -- вы забыли проверить входные данные на валидность. Упавший тест "напомнит" вам об этом. Причем я бы рекомендовал писать тесты в "обратном" порядке -- от некорректных случаев к корректным. Это позволит сразу указать все нужные проверки и обойти самые простые ошибки.

Комментариев нет:

Отправить комментарий