Pagina 1 di 1

[JAVA]assertEquals vs assertSame

Inviato: lunedì 27 marzo 2017, 21:30
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?

Re: [JAVA]assertEquals vs assertSame

Inviato: sabato 8 aprile 2017, 17:33
da melfnt
Ciao!
Prova a guardare qui.

Re: [JAVA]assertEquals vs assertSame

Inviato: domenica 9 aprile 2017, 19:17
da CRIMON
bhé si, tanto vale rimuivere questa e tutte le altre sezioni del forum, grazie

Re: [JAVA]assertEquals vs assertSame

Inviato: lunedì 10 aprile 2017, 18:25
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.

Re: [JAVA]assertEquals vs assertSame

Inviato: lunedì 10 aprile 2017, 21:52
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

Re: [JAVA]assertEquals vs assertSame

Inviato: martedì 11 aprile 2017, 10:23
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


Re: [JAVA]assertEquals vs assertSame

Inviato: martedì 11 aprile 2017, 21:27
da CRIMON
okey, grazie, quindi se non sbaglio se voglio fare un assert a un tipo restituito da un metodo same è "più stringente" giusto?

Re: [JAVA]assertEquals vs assertSame

Inviato: giovedì 13 aprile 2017, 22:22
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.

Re: [JAVA]assertEquals vs assertSame

Inviato: giovedì 13 aprile 2017, 22:25
da CRIMON
grazie