2017-09-14 5 views
1

Je cette méthode avec cette signature:java.lang.AssertionError lors de la session TDD

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

et mon cas de test 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); 

} 

Pourquoi mon test ne passe pas et je cette Erreur?

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

Répondre

2

Vous comparez un String: "al" avec un char[].

Vous devrez convertir result en String avant d'appeler assertEquals.

Par exemple:

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

Ou vous pouvez les comparer sous forme de tableaux comme ceci:

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

Mise à jour 1: En réponse aux commentaires ci-dessous, la question n'est plus dans la assertion, le problème est dans la méthode checkDouble(). Vous affectez un char[26] à copyLoop puis parcourez la chaîne donnée et définissez un caractère dans ce tableau pour chaque lettre dupliquée. Vous retournez ensuite ce tableau. Ainsi, lorsque vous passez dans "wallaby" le résultat copyLoop contient "a", "l" et tous les autres éléments dans copyLoop est la valeur de caractère par défaut: '\u0000'. Cela provoque l'affirmation à l'échec, mais ces valeurs char par défaut ne sont pas visibles pour vous lorsque vous imprimez le résultat que vous êtes trompé en pensant que le résultat ne contient « al » alors qu'en fait il contient:

`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 public void() { \t \t char [] résultat = c.checkDouble ("casa"); \t \t Assert.assertEquals ("a", String.valueOf (résultat)); \t \t \t} Je suis désolé mais cela ne fonctionne pas. Encore une fois: prévu: mais était: . Je suis confus! – Clash

+0

@Clash pourriez-vous mettre à jour votre question pour inclure l'implémentation de 'checkDouble()'? – glytching

+0

'public char [] checkDouble (Chaîne s) { \t \t int [] letters = new int [26]; Pour (int i = 0; i 1) { \t \t char c = (char) (i + 97); \t \t copyLoop [i] = c; \t \t} \t \t} \t \t copyLoop de retour; \t \t \t} ' – Clash