web-dev-qa-db-fra.com

Utilisation d'assertArrayEquals dans les tests unitaires

Mon intention est d'utiliser assertArrayEquals(int[], int[]) la méthode JUnit décrite dans l'API pour la vérification d'une méthode dans ma classe.

Mais Eclipse me montre le message d'erreur qu'il ne peut pas reconnaître une telle méthode. Ces deux importations sont en place:

import Java.util.Arrays;
import junit.framework.TestCase;

Ai-je manqué quelque chose?

37
Eugene

Cela devrait fonctionner avec JUnit 4:

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

public class JUnitTest {

    /** Have JUnit run this test() method. */
    @Test
    public void test() throws Exception {

        assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});

    }
}

(la réponse est basée sur cet article wiki )


Et c'est la même chose pour l'ancien framework JUnit (JUnit 3):

import junit.framework.TestCase;

public class JUnitTest extends TestCase {
  public void test() {
    assertArrayEquals(new int[]{1,2,3},new int[]{1,2,3});
  }
}

Notez la différence: pas d'annotations et la classe de test est une sous-classe de TestCase (qui implémente les méthodes d'assertion statiques).

56
Andreas_D

Cela pourrait être utile si vous souhaitez utiliser simplement assertEquals sans dépendre de votre version Junit

assertTrue(Arrays.equals(expected, actual));
30
carlospiles

Essayez d'ajouter:

import static org.junit.Assert.*;

assertArrayEquals est une méthode statique.

5
user417196

Si vous écrivez des tests de style JUnit 3.x qui étendent TestCase , vous n'avez pas besoin d'utiliser le qualificatif Assert - TestCase étend Assert lui-même et ces méthodes sont donc disponibles sans le qualificatif.

Si vous utilisez des annotations JUnit 4, en évitant la classe de base TestCase, le qualificatif Assert est nécessaire, ainsi que l'importation org.junit.Assert. Vous pouvez utiliser une importation statique pour éviter le qualificatif dans ces cas, mais ceux-ci sont considérés comme style médiocre par certains.

0
mdma