[JAVA]assertEquals vs assertSame

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
CRIMON
Prode Principiante
Messaggi: 136
Iscrizione: domenica 30 agosto 2015, 18:38
Desktop: Unity\Mate
Distribuzione: Ubuntu 15.10
Sesso: Maschile

[JAVA]assertEquals vs assertSame

Messaggio da CRIMON »

salve, stavo provando Junit epr il testing, volevo dei chiarimenti, qule è la differenza tra asserEquals e assertSame, io avevo capito che assertSame equivale a un == e quindi meno stringente dell' equals che vale come metodo .equals(), giusto?
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [JAVA]assertEquals vs assertSame

Messaggio da melfnt »

Ciao!
Prova a guardare qui.
CRIMON
Prode Principiante
Messaggi: 136
Iscrizione: domenica 30 agosto 2015, 18:38
Desktop: Unity\Mate
Distribuzione: Ubuntu 15.10
Sesso: Maschile

Re: [JAVA]assertEquals vs assertSame

Messaggio da CRIMON »

bhé si, tanto vale rimuivere questa e tutte le altre sezioni del forum, grazie
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [JAVA]assertEquals vs assertSame

Messaggio da melfnt »

Se hai un problema molto specifico, che hai già provato a risolvere da solo anche facendo una ricerca sul forum e su google, allora sono ben lieto di aiutarti.
Se invece per risolvere il problema basta una ricerca non vedo il senso di un post, che ti fa perdere anche un sacco di tempo mentre aspetti che qualcuno ti risponda.

(;

Per ulteriori info ti rimando al regolamento.
CRIMON
Prode Principiante
Messaggi: 136
Iscrizione: domenica 30 agosto 2015, 18:38
Desktop: Unity\Mate
Distribuzione: Ubuntu 15.10
Sesso: Maschile

Re: [JAVA]assertEquals vs assertSame

Messaggio da CRIMON »

il dubbio mi è venuto durante una lezione, perchè usavo assertEquals in un modo(ovvero come se fosse il metodo .equals()) perchè così avevo letto venisse usato, mentre a lezione il professore (che non mi azzarderei mai a screditare) ci ha detto il contrario con degli esempi, volevo sapere quale era la soluzione più giusta
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [JAVA]assertEquals vs assertSame

Messaggio da melfnt »

Non c'è una soluzione più "giusta": sono due cose diverse.
assertEquals restituisce true se e solo se i due parametri sono uguali secondo la funzione equals, mentre assertSame restituisce true se e solo se i due parametri sono una referenza allo stesso oggetto.
A seconda dei casi ti servirà utilizzare uno o l'altro.

Piccolo esempio:

Codice: Seleziona tutto

public class Point 
{

    private final int x;
    private final int y;
    
    ....

    @Override public boolean equals(Object other) {
        boolean result = false;
        if (other instanceof Point) {
            Point that = (Point) other;
            result = (this.getX() == that.getX() && this.getY() == that.getY());
        }
        return result;
    }

codice di debug

Codice: Seleziona tutto

Point p1 = new Point ( 5, 10 );
Point p2 = new Point ( 5, 10 );

assertEquals ( p1, p2 ); // true
assertSame ( p1, p2 ); // false

assertEquals ( p1, p1 ); // true
assertSame ( p1, p1 ); // true

CRIMON
Prode Principiante
Messaggi: 136
Iscrizione: domenica 30 agosto 2015, 18:38
Desktop: Unity\Mate
Distribuzione: Ubuntu 15.10
Sesso: Maschile

Re: [JAVA]assertEquals vs assertSame

Messaggio da CRIMON »

okey, grazie, quindi se non sbaglio se voglio fare un assert a un tipo restituito da un metodo same è "più stringente" giusto?
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [JAVA]assertEquals vs assertSame

Messaggio da melfnt »

Sì, perché se assertSame(a, b) vale true allora vale necessariamente anche assertEquals(a,b)[1], ma non è vero il viceversa: potrebbero esistere due oggetto per cui vale assertEquals (a,b) ma non assertSame(a,b), come i due punti p1 e p2 dell'esempio precedente.

[1] In realtà potresti implementare equals in modo che sia meno stringente del confronto fra le referenze, ma se rispetti le linee guida per l'implementazione di equals questo non dovrebbe mai succedere.
CRIMON
Prode Principiante
Messaggi: 136
Iscrizione: domenica 30 agosto 2015, 18:38
Desktop: Unity\Mate
Distribuzione: Ubuntu 15.10
Sesso: Maschile

Re: [JAVA]assertEquals vs assertSame

Messaggio da CRIMON »

grazie
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti