Non capisco esattamente l'utilità del secondo pezzo di codice (@Before e @Test). Su Eclipse leggo Errori 0 quindi dovrebbe essere tutto a posto ma non capisco che tipo di test fa.
Cod 1
Cod 2codice:package lab1b; public class Customer { private String name; private String address; private double amountInvoiced; void SetName(String x) { this.name=x; } void SetAddress(String y) { this.address=y; } void SetAmountInvoiced(double z) { this.amountInvoiced=z; } String GetName() { //posso anche scrivere 'return name;' return this.name; } String GetAddress() { return this.address; } double GetAmountInvoiced() { return this.amountInvoiced; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((address == null) ? 0 : address.hashCode()); long temp; temp = Double.doubleToLongBits(amountInvoiced); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof Customer)) { return false; } Customer other = (Customer) obj; if (address == null) { if (other.address != null) { return false; } } else if (!address.equals(other.address)) { return false; } if (Double.doubleToLongBits(amountInvoiced) != Double.doubleToLongBits(other.amountInvoiced)) { return false; } if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } return true; } }
In pratica, se ho capito bene, il secondo codice verifica che il metodo equals() riscritto con @Override al passaggio precedente funzioni alla perfezione e non contenga errori ma non capisco quali test esegua?codice:package lab1b; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; public class CustomerTest { private Customer c1, c2; @Before public void init() { c1=new Customer(); c2=new Customer(); } @Test public void testEqualsOk() { assertTrue(c1.equals(c2)); } }
Se scrivo:
i test passano tranquillamente dunque questo codice a che serve?codice:@Override public boolean equals(Object obj) { return true; }
Perché è così importante!?! jUnit non dovrebbe prendere tutti i possibili valori dei singoli oggetti e testare che l'equals() di @Override funzioni esattamente come l'equals() originale?codice:package lab1b; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; public class CustomerTest { private Customer c1, c2; @Before public void init() { c1=new Customer(); c2=new Customer(); } @Test public void testEqualsOk() { assertTrue(c1.equals(c2)); } }
jUnit non dovrebbe fare qualcosa di più raffinato di quello che vi scrivo qui sotto?!?!
ciaocodice:package lab1b; public class TestSemplice { public static void main( String[] args ) { Customer A = new Customer(); A.SetName("Marco"); A.SetAddress("Rossi"); A.SetAmountInvoiced(12.695); System.out.println(A.GetName()); System.out.println(A.GetAddress()); System.out.println(A.GetAmountInvoiced()); Customer B = new Customer(); B.SetName("Marco"); B.SetAddress("Rossi"); B.SetAmountInvoiced(12.695); System.out.println(B.GetName()); System.out.println(B.GetAddress()); System.out.println(B.GetAmountInvoiced()); //Senza @Override i due oggetti sono diversi System.out.println(A.equals(B)); System.out.println("%%% TEST 1 %%%"); if(A.equals(B) && A.hashCode()==B.hashCode()) { System.out.println("Gli oggetti confrontati con equals() e hashCode() modificati con @Override coincidono."); } else { System.out.println("Gli oggetti confrontati sono differenti."); } //hash() genera un codice a partire da una serie di oggetti //Se i 3 oggetti che compongono le 2 classi sono rispettivamente identici i codici hash coincidono System.out.println(A.hashCode()); System.out.println(B.hashCode()); //Altro esempio Customer C = new Customer(); Customer D = null; System.out.println("%%% TEST 2 %%%"); if(C.equals(D) && C.hashCode()==D.hashCode()) { System.out.println("Gli oggetti confrontati con equals() e hashCode() modificati con @Override coincidono."); } else { System.out.println("Gli oggetti confrontati sono differenti."); } } }

Rispondi quotando

