2009-10-12 6 views
2

Ma configuration:assertArrayEquals (Object [] o1, Object [] o2) ne peuvent pas être trouvés

Netbeans 6.7 
    Java6 
    JUnit 4.5 added as the Test libraries 

Lorsque je tente de passer dans deux tableaux de la classe (CAST comme Object []) Je reçois l'erreur « ne peut pas trouver le symbole "et mon test ne compilera pas.

Je n'ai pas de problème avec les autres instructions assert, et comme je l'ai dit, j'utilise les bibliothèques JUnit 4.5.

Quelqu'un at-il une idée sur la façon de résoudre ce problème ou a-t-il observé ce comportement bizarre?

Netbeans est capable de trouver cette déclaration de fonction via sa saisie semi-automatique, mais il est incapable de trouver où il se trouve ou peut naviguer vers les sources.

Exemple de code:

CustomObject[] coa = { new CustomObject() ....} 
CustomObject[] expected = { new CustomObject() ... } 
assertArrayEquals((Object[])coa, (Object[])expected); 
+0

Veuillez poster le code de test. – SingleShot

Répondre

3

Eh bien, Assert.assertArrayEquals est une méthode statique, comme vous pouvez le voir dans votre code qui fonctionne:

org.junit.Assert.assertArrayEquals(....) 

Mais dans le code que vous donnez, vous essayiez pour l'utiliser comme une méthode d'instance:

assertArrayEquals((Object[])coa, (Object[])expected); 

cela ne fonctionnerait que si vous statiquement ou importé Assert.*Assert.assertArrayEquals.

Maintenant, si vos autres affirmations travaillent, ma conjecture est que vous tirer encore de TestCase (la « vieille » de l'écriture de tests JUnit) et que vos affirmations appellent TestCase.assertEquals etc.

Si vous pouvez donner un court mais complet exemple d'un test unitaire où une assertion fonctionne, mais assertArrayEquals ne fonctionne pas, nous pourrions probablement travailler sur ce qui se passe.

+0

Tous les assertArrayEquals échouaient. Cette explication a le plus de sens. – monksy

0

La question était que le compilateur refusait de regarder dans la classe réelle .. mais il avec un chemin abosulte: org.junit.Assert.assertArrayEquals (... .

plutôt ennuyeux j'ajouter.

+1

Cela n'a aucun sens. S'il vous plaît poster votre code. – SingleShot

+0

Cela n'a aucun sens.Je n'ai pas de méthodes surchargées qui correspondent à assertArrayEquals (Object [], Object []) dans la portée de la méthode. Le seul endroit où la définition existe est dans org.junit.Assert. – monksy

1

Vous n'avez pas besoin de se qualifier pleinement l'affirmation ou vos tableaux jeter à l'objet des tableaux. Il suffit d'importer les pièces appropriées de JUnit et passer vos tableaux directement. Vous devez inverser l'ordre des paramètres Dans votre exemple - ce que vous attendez en premier («attendu»), ce que vous obtenez réellement du test vient en second («réels»). Cela fonctionne très bien:

import org.junit.*; 
import static org.junit.Assert.*; 

public class TestJUnitActuallyWorks { 

    @Test 
    public void myArraysShouldBeIdentical() { 

     CustomObject one = new CustomObject(); 
     CustomObject two = new CustomObject(); 
     CustomObject three = new CustomObject(); 

     CustomObject[] expecteds = { one, two, three }; 
     CustomObject[] actuals = { one, two, three }; 
     assertArrayEquals(expecteds, actuals); 
    } 

    private static class CustomObject {} 
} 
+0

C'est ce que je faisais, et la compilation ne semblait pas vouloir pointer vers l'implémentation dans org.junit.Assert. *; classe. – monksy

+0

La troisième fois est un charme: veuillez poster votre code de test ... – SingleShot

0

J'aime la réponse de SingleShot sauf que ses deux tableaux contiennent en réalité les mêmes objets. Et si les objets ne sont pas les mêmes objets réels (objets différents, mêmes valeurs mais doivent être égaux).

Alors j'ai pensé que j'allais améliorer sa réponse pour montrer comment faire.

@Test 
public void myArraysShouldBeIdentical() { 

    CustomObject one1 = new CustomObject("one"); 
    CustomObject two1 = new CustomObject("two"); 
    CustomObject three1 = new CustomObject("three"); 

    CustomObject one2 = new CustomObject("one"); 
    CustomObject two2 = new CustomObject("two"); 
    CustomObject three2 = new CustomObject("three"); 

    CustomObject[] expecteds = { one1, two1, three1 }; 
    CustomObject[] actuals = { one2, two2, three2 }; 
    assertArrayEquals(expecteds, actuals); 
} 

private static class CustomObject { 
    public String value; 

    CustomObject(String inValue) 
    { 
     value = inValue; 
    } 

    @Override 
    public int hashCode() { 
     return value.hashCode(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (obj == null) 
      return false; 
     if (obj == this) 
      return true; 
     if (!(obj instanceof CustomObject)) 
      return false; 

     CustomObject rhs = (CustomObject) obj; 
     return value == rhs.value; 
    } 
}