gpt4 book ai didi

TDD session 期间出现 java.lang.AssertionError

转载 作者:行者123 更新时间:2023-11-30 02:23:33 24 4
gpt4 key购买 nike

我有这个方法和这个签名:

public char[] checkDouble(String s) { 
int[] letters = new int[26];
for (int i = 0; i < s.length(); i++) {
letters[s.charAt(i) - 97]++;
}
char[] copyLoop = new char[26];
for (int i = 0; i < letters.length; i++) {
if (letters[i] > 1) {
char c = (char) (i + 97);
copyLoop[i] = c;
}
}
return copyLoop;
}

和我的 Junit 测试用例:

public class DoubleCharTest {

private DoubleChar c;

@Before
public void before() {
c = new DoubleChar();
}

@Test
public void test1(){
char [] result = c.checkDouble("wallaby");
Assert.assertEquals("al", result);

}

为什么我的测试没有通过并且出现此错误?

expected: 'al' but was:<[C@3d075dc0>

最佳答案

您正在比较 String: "al"与 char[]

在调用 assertEquals 之前,您必须将 result 转换为 String

例如:

Assert.assertEquals("al", String.valueOf(result));

或者您可以将它们作为数组进行比较,如下所示:

Assert.assertArrayEquals("al".toCharArray(), result);

更新1:针对下面的评论,问题不再出在断言中,问题出在checkDouble()方法中。您将 char[26] 分配给 copyLoop,然后遍历给定的字符串并为每个重复的字母在该数组中设置一个 char。然后返回该数组。因此,当您传入“wallaby”时,生成的 copyLoop 包含“a”、“l”,并且 copyLoop 中的每个其他元素都是默认字符值:'\u0000'。这会导致断言失败,但是当您打印结果时,这些默认的 char 值对您不可见,因此您会被欺骗认为结果仅包含“al”,而实际上它包含:

`a,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,l,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000,\u0000`. 

关于TDD session 期间出现 java.lang.AssertionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com