Фактический и ожидаемый сок - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь выучить Junit4 и выполнить тесты для моего кода. По сути, я переворачиваю строку и сохраняю специальные символы на месте. Во время тестирования я обнаружил эту ошибку, которую не могу понять. Мой модульный тест не пройден, хотя фактическое значение и ожидаемое совпадают. Заранее спасибо!

Ошибка:

org.junit.ComparisonFailure:
Ожидается: d1cba hgf! E
Фактически: d1cba hgf ! e

Код

public final class AnagramsMaker {
    public static String reverseWord(String stringToReverse) {
        char[] stringToChar = stringToReverse.toCharArray();
        int arrayStart = 0;
        int arrayEnd = stringToChar.length - 1;

        while (arrayStart < arrayEnd) {
            if (Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
                char temp = stringToChar[arrayStart];
                stringToChar[arrayStart] = stringToChar[arrayEnd];
                stringToChar[arrayEnd] = temp;

                arrayStart++;
                arrayEnd--;
            }
            else if (Character.isLetter(stringToChar[arrayStart]) && !Character.isLetter(stringToChar[arrayEnd])) {
                arrayEnd--;
            }
            else if (!Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
                arrayStart++;
            }
            else {
                arrayStart++;
                arrayEnd--;
            }
        }

        return String.valueOf(stringToChar);
    }

    public static String createAnagram(String inputString) {
        String anagram = "";
        String [] arr = inputString.split(" ");

        for (String s : arr) {
            anagram += reverseWord(s) + " ";
        }
        return anagram;
        } 
   }

Junit:

 @Test
    public void createAnagram() {
        assertEquals("d1cba hgf!e", AnagramsMaker.createAnagram("a1bcd efg!h"));
    }

1 Ответ

3 голосов
/ 04 февраля 2020

Я попытался воспроизвести это и получил это: expected: <d1cba hgf!e> but was: <d1cba hgf!e >. Обратите внимание на дополнительный пробел в конце.

В методе createAnagram есть ошибка. Вы добавляете дополнительное пространство после каждой строки, но для последней итерации в конце добавляется дополнительное пространство, которое вызывает эту проблему.

Как исправить, обрежьте значение перед возвратом, как показано ниже

public static String createAnagram(String inputString) {
        String anagram = "";
        String [] arr = inputString.split(" ");

        for (String s : arr) {
            anagram += reverseWord(s) + " ";
        }
        return anagram.trim();
    }

Если вы знакомы с java8 и потоками, лучше использовать метод Collectors.joining, как показано ниже

public static String createAnagram(String inputString) {
        String[] arr = inputString.split(" ");
        return Stream.of(arr)
                .map(AnagramsMaker::reverseWord)
                .collect(Collectors.joining(" "));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...