【问题标题】:Juint actual and expected the same but test failsJunit 实际和预期相同,但测试失败
【发布时间】:2020-02-04 11:39:57
【问题描述】:

我正在尝试学习 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;
        } 
   }

朱尼特:

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

【问题讨论】:

    标签: java junit4


    【解决方案1】:

    我尝试复制它并得到了这个:expected: &lt;d1cba hgf!e&gt; but was: &lt;d1cba hgf!e &gt;。注意最后的多余空间。

    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(" "));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2013-09-07
      • 2021-07-03
      • 2022-01-23
      • 2012-08-17
      • 2017-11-16
      • 2012-09-03
      相关资源
      最近更新 更多