2015-11-15 1 views
0

Donc, je passais par les tests de JUnit 4.0 et je testais les tableaux d'objets (Stick) s'ils étaient égaux, ce qu'ils sont, mais j'ai un test d'échec.assertEquals (Object [], Object []) dans JUnit?

classe Bâton:

public class Stick { 
     private char stick; 

     public Stick() { 
      stick = 'I'; 
    } 

La classe de jeu - où j'initialiser le tableau de bâton:

public class Game { 
private Stick[] sticks; 

public Stick[] StartNewGame() { 
    counter = 1; 
    sticks = new Stick[22]; 

    for(int i = 0; i<sticks.length; i++) { 
     Stick a_stick = new Stick(); 
     sticks[i] = a_stick; 
    } 
    return sticks; 
} 

Le code de test:

@Test 
    public void ShouldStartAGame() { 
     Stick[] sticks = new Stick[22]; 
     for(int i = 0; i<sticks.length; i++) { 
      Stick a_stick = new Stick(); 
      sticks[i] = a_stick; 
     } 
     assertArrayEquals(sticks, game.StartNewGame()); 

    } 
+1

Dites à JUnit comment considérez-vous que 2 objets Stick sont égaux en remplaçant la méthode equals() par défaut dans la classe Stick. –

+0

@hello_harry merci! –

Répondre

1

Je pense, cela est dû à l'absence d'une méthode égale sur Stick, donc égale est la comparaison de l'adresse mémoire de l'élément Stick[] s et les trouver pour être différent. Remplacez les méthodes equals (et hashcode) par défaut dans Stick. Le test viole également le principe DRY, puisque vous répétez votre code d'implémentation dans le test, si vous dupliquez une erreur de l'implémentation dans le test en utilisant le copier-coller, aucun test unitaire dans le monde ne trouvera d'erreur.