2017-09-14 53 views
1

我有這樣的方法與此簽名:java.lang.AssertionError

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); 

} 

爲什麼我的測試沒有通過,我有這個錯誤?用char[] 「人」:

expected: 'al' but was:<[[email protected]> 

回答

2

您比較一個String

在調用assertEquals之前,您必須將result轉換爲String

例如:

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

或者你可以把它們比像這樣的數組:

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

更新1:針對下面的意見,該問題已不再是在斷言,問題出在checkDouble()方法中。您正在分配char[26]copyLoop,然後遍歷給定的字符串,併爲每個複製的字母在該數組中設置一個字符。然後你返回該數組。所以,當你傳入「wallaby」時,生成的copyLoop包含「a」,「l」,並且copyLoop中的每個其他元素都是默認的char值:'\u0000'。這會導致斷言失敗,但是當你打印出結果,這樣你就誤以爲結果只包含「人」,而實際上它包含這些默認字符值是不是對你可見:

`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`. 
+0

公共無效TEST1 (){ \t \t char [] result = c.checkDouble(「casa」); \t \t Assert.assertEquals(「a」,String.valueOf(result)); \t \t \t} 我很抱歉,但它不起作用。 再次:預計:但是:。 我很困惑! – Clash

+0

@Clash是否可以更新您的問題以包含'checkDouble()'的實現? – glytching

+0

'public char [] checkDouble(String s){ \t \t int [] letters = new int [26];對於(int i = 0; i 1){0,1,2) \t \t copyLoop [i] = c; \t \t} \t \t} \t \t回報copyLoop; \t \t \t}' – Clash

相關問題