Comment comparer deux objets à l'aide de assertEquals ou par tout autre moyen de JUNIT test?
Ci-dessous est JUNIT test que j'ai écrit pour comparer l'objet créé (Réelle) de la chaîne Json et l'objet créé (Prévu) dans la fonction de test.
@Test
public void testSalesChannel_1_ObjSrc(){
SalesChannel oScExpected = new SalesChannel();
oScExpected.setSalesChannelId(79662);
oScExpected.setCompanyName("BMW");
oScExpected.setCountry("DE");
oScExpected.setActive(true);
String jsonStringActual = "{\"salesChannelId\":79662,"
+ "\"companyName\":\"BMW\","
+ "\"country\":\"DE\",\"isActive\":true,"
+ "\"salesChannelContact\":[]}";
SalesChannel oScActual = gson.fromJson(jsonStringActual, SalesChannel.class);
System.out.println(oScExpected.toString());
System.out.println(oScActual.toString());
//assertEquals(oScExpected, oScActual);
assertTrue(oScExpected.equals(oScActual));
}
MAIS quand j'execute assertEquals(), il échoue à l'examen. Quelle pourrait être la raison?
ET mon Canal de Vente de la classe est:
package com.pf.activationServer;
import java.util.List;
import com.pf.activationServer.SalesChannelContact;
public class SalesChannel {
private int salesChannelId;
private String companyName;
private CountryCode country;
private boolean isActive;
private List<SalesChannelContact> salesChannelContact;
//getter methods
protected int getSalesChannelId() {
return salesChannelId;
}
protected String getCompanyName() {
return companyName;
}
protected CountryCode getCountry() {
return country;
}
protected boolean isActive() {
return isActive;
}
protected List<SalesChannelContact> getSalesChannelContact() {
return salesChannelContact;
}
//setter methods
protected void setSalesChannelId(int salesChannelId) {
this.salesChannelId = salesChannelId;
}
protected void setCompanyName(String companyName) {
this.companyName = companyName;
}
protected void setCountry(String a){
this.country = CountryCode.valueOf(a);
}
protected void setActive(boolean isActive) {
this.isActive = isActive;
}
protected void setSalesChannelContact(List<SalesChannelContact> salesChannelContact) {
this.salesChannelContact = salesChannelContact;
}
//Checks whether two SalesChannel objects are equal or not
public boolean equals(SalesChannel other) {
if (this == other)
return true;
if (other == null)
return false;
if (getClass() != other.getClass())
return false;
//SalesChannel other = (SalesChannel) obj;
if (companyName == null) {
if (other.companyName != null)
return false;
} else if (!companyName.equals(other.companyName))
return false;
if (country != other.country)
return false;
if (isActive != other.isActive)
return false;
if (this.salesChannelContact == null) {
if (other.salesChannelContact != null)
return false;
} else if (!salesChannelContact.equals(other.salesChannelContact))
return false;
if (salesChannelId != other.salesChannelId)
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((companyName == null) ? 0 : companyName.hashCode());
result = prime * result + ((country == null) ? 0 : country.hashCode());
result = prime * result + (isActive ? 1231 : 1237);
result = prime
* result
+ ((salesChannelContact == null) ? 0 : salesChannelContact
.hashCode());
result = prime * result + salesChannelId;
return result;
}
} //END class SalesChannel
puis-je avoir votre aide!
OriginalL'auteur Amir | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
Exécuter ce code et de le coller votre entrée
J'ai édité ma réponse. Générer des méthodes toString/equals et hashCode dans com.pruftechnik.activationServer.SalesChannel et l'exécuter à nouveau
à propos de méthode equals (): à mon avis, quand vous créer une nouvelle classe en java, vous devez générer quelques choses pour éviter les ennuis dans le futur: les getters, setters, constructeur par défaut, equals et hashCode. Pour faciliter le débogage, vous pouvez également créer toString. Dans Eclipse, vous pouvez le faire automatiquement avec ALT + SHIFT + s et vous pouvez choisir ce que vous souhaitez à partir du menu qui apparaît.
modifiez ce qui suit: private List<SalesChannelContact> salesChannelContact;: private List<SalesChannelContact> salesChannelContact = new ArrayList<SalesChannelContact>(); et coller de nouveau de sortie
oui maintenant terminé, merci pour votre compagnon!
OriginalL'auteur ruhungry
Votre méthode equals est d'utiliser un spécifique à la classe et non à l'Objet.
Vous devez remplacer la equals(Object obj) méthode avec votre propre mise en œuvre.
Si vous effectuez tout d'abord le typage, et appeler la mise en œuvre est égal classe que vous devez avoir plus de chance.
assertEquals est l'appel de la equals(Object obj) méthode de la super-classe (dans votre cas, Objet) qui, par défaut, se contente de comparer la référence de l'objet. Comme ils ne sont pas du même objet, votre résultat sera un échec.
Donc, si vous regardez comme l'interprète le voit.
Afin de le fixer
return this.equals((SalesChannel) obj);
est un excellent jeu de mots!OriginalL'auteur sweetfa
Vérifier vos noms et types de variables dans POJO Myclass comme GSON recommande fort le nom et la vérification de type de la classe par rapport à JSON.
OriginalL'auteur user3152555
De répondre à la question dans le titre: pour comparer les champs de 2 objets utilisation Unitils et ses assertReflectionEquals.
OriginalL'auteur Stanislav Bashkyrtsev