Pregunta

Mi configuración:

  Netbeans 6.7
  Java6
  JUnit 4.5 added as the Test libraries

Cuando intento pasar dos matrices de clases (transmitidas como Objeto []), aparece el error "no se puede encontrar el símbolo" y mi caso de prueba no se compila.

No tengo ningún problema con las otras declaraciones de afirmación y, como dije, estoy usando las bibliotecas JUnit 4.5.

¿Alguien tiene idea de cómo solucionar este problema o ha observado este comportamiento peculiar?

Netbeans puede encontrar esta declaración de función a través de su función de autocompletar, pero no puede encontrar dónde está ubicada ni puede navegar a las fuentes.

Código de muestra:

CustomObject[] coa = { new CustomObject() ....}
CustomObject[] expected = { new CustomObject() ... } 
assertArrayEquals((Object[])coa, (Object[])expected);
¿Fue útil?

Solución

Bueno, Assert.assertArrayEquals es un método estático, como puedes ver en tu código que está funcionando:

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

Pero en el código que estabas proporcionando, intentabas usarlo como método de instancia:

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

Eso sólo funcionaría si hubieras importado estáticamente Assert.* o Assert.assertArrayEquals.

Ahora, si tus otras afirmaciones funcionan, mi adivinar es que todavía estás derivando de TestCase (es decir.la forma "antigua" de escribir pruebas JUnit) y que sus afirmaciones están llamando TestCase.assertEquals etc.

Si pudieras dar un breve pero completo ejemplo de una prueba unitaria donde una afirmación funciona pero assertArrayEquals no es así, probablemente podríamos averiguar qué está pasando.

Otros consejos

No es necesario para calificar plenamente la afirmación o el yeso de las matrices de oponerse matrices. Sólo tiene que importar las partes apropiadas de JUnit y pase directamente las matrices. Usted debe invertir el orden de los parámetros de su ejemplo, aunque - lo que espera que ocurra primero ( "expecteds"), lo que en realidad se obtiene de la prueba ocupa el segundo lugar ( "Informes estadísticos"). Esto funciona 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 {}
}

El problema fue que el compilador se negaba a mirar en la clase real .. pero sería con una ruta abosulte: org.junit.Assert.assertArrayEquals (....

bastante molesto que puede añadir.

Me gusta la respuesta de SingleShot excepto sus dos matrices en realidad contienen los mismos objetos. ¿Qué pasa si los objetos no son los mismos objetos reales (diferentes objetos mismos valores, pero deben ser iguales).

Así que pensé que iba a mejorar su respuesta a mostrar cómo hacer esto.

@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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top