Domanda

La mia configurazione:

  Netbeans 6.7
  Java6
  JUnit 4.5 added as the Test libraries

Quando provo a passare due array di classi (cast come Object[]) ottengo l'errore "impossibile trovare il simbolo" e il mio test case non verrà compilato.

Non ho problemi con le altre dichiarazioni assert e, come ho detto, sto utilizzando le librerie JUnit 4.5.

Qualcuno ha idea di come risolvere questo problema o ha osservato questo comportamento bizzarro?

Netbeans è in grado di trovare questa dichiarazione di funzione tramite il completamento automatico, ma non è in grado di trovare dove si trova o di navigare fino ai sorgenti.

Codice d'esempio:

CustomObject[] coa = { new CustomObject() ....}
CustomObject[] expected = { new CustomObject() ... } 
assertArrayEquals((Object[])coa, (Object[])expected);
È stato utile?

Soluzione

Bene, Assert.assertArrayEquals è un metodo statico, come puoi vedere dal tuo codice che funziona:

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

Ma nel codice che stavi fornendo, stavi cercando di usarlo come metodo di istanza:

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

Funzionerebbe solo se avessi importato staticamente Assert.* O Assert.assertArrayEquals.

Ora, se le altre tue asserzioni funzionano, my Indovinare è quello da cui stai ancora derivando TestCase (cioè.il "vecchio" modo di scrivere i test JUnit) e che le tue asserzioni stanno chiamando TestCase.assertEquals eccetera.

Se potessi dare un breve ma completare esempio di test unitario in cui un'affermazione funziona ma assertArrayEquals non lo fa, probabilmente potremmo capire cosa sta succedendo.

Altri suggerimenti

Non è necessario qualificare pienamente l'affermazione o lanciare gli array di opporsi array. Basta importare le parti appropriate di JUnit e passare gli array direttamente. Si dovrebbe invertire l'ordine dei parametri dal vostro esempio se - cosa vi aspettate viene prima ( "expecteds"), quello che effettivamente ottenere dal test arriva secondo ( "Erogato"). Questo funziona bene:

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

Il problema era che il compilatore si rifiutava di esaminare la classe reale .. ma sarebbe con un percorso abosulte: org.junit.Assert.assertArrayEquals (....

piuttosto fastidioso posso aggiungere.

Mi piace la risposta di SingleShot tranne i suoi due array in realtà contengono gli stessi oggetti. E se gli oggetti non sono gli stessi oggetti reali (oggetti diversi, ma stessi valori devono essere uguali).

Così ho pensato di migliorare la sua risposta per mostrare come fare questo.

@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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top