Я хочу написать тест, где он проверяет, являются ли два объекта одинаковыми. Когда утверждение терпит неудачу, я хочу знать, какие поля такие же, а какие нет. Я могу утверждать на каждом поле, но задавался вопросом, есть ли способ скомпоновать объекты.Как утверждать объекты равны с использованием hamcrest
Грузовик Класс:
import java.util.List;
public class Truck {
private String model;
private String make;
private int year;
private List<TruckPartsObject> parts;
public Truck(String model, String make, int year) {
super();
this.model = model;
this.make = make;
this.year = year;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public List<TruckPartsObject> getParts() {
return parts;
}
public void setParts(List<TruckPartsObject> parts) {
this.parts = parts;
}
@Override
public String toString() {
return "Truck{" + "model='" + model + '\'' + ", make='" + make + '\''
+ ", year=" + year + ", parts=" + parts + '}';
}
}
TruckPartsObject Класс:
import java.util.HashMap;
public class TruckPartsObject {
private String name;
private String price;
private HashMap<String, String> partsHashMap;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public HashMap<String, String> getPartsHashMap() {
return partsHashMap;
}
public void setPartsHashMap(HashMap<String, String> partsHashMap) {
this.partsHashMap = partsHashMap;
}
@Override
public String toString() {
return "TruckPartsObject{" + "name='" + name + '\'' + ", price='"
+ price + '\'' + ", partsHashMap=" + partsHashMap + '}';
}
}
Тест:
@Test
public void truckTest() {
Truck pickupTruck1 = new Truck("Big 10", "Chevy", 1976);
Truck pickupTruck2 = new Truck("Big 10", "Chevy", 1976);
List<TruckPartsObject> parts1 = new ArrayList<TruckPartsObject>();
TruckPartsObject truckPartsObject1 = new TruckPartsObject();
truckPartsObject1.setName("part1");
parts1.add(truckPartsObject1);
pickupTruck1.setParts(parts1);
List<TruckPartsObject> parts2 = new ArrayList<TruckPartsObject>();
TruckPartsObject truckPartsObject2 = new TruckPartsObject();
truckPartsObject2.setName("part1");
parts2.add(truckPartsObject2);
pickupTruck2.setParts(parts2);
pickupTruck2.setParts(parts2);
System.out.println(pickupTruck1);
System.out.println(pickupTruck2);
//how to assert pickupTruck1 and pickupTruck2 have the same
}
, как утверждают pickupTruck1 и pickupTruck2 имеют то же самое?
Объект 'Truck' намеренно не имеет метода' equals', или он просто не отображается здесь? – Mureinik
У него нет метода equals. Я могу добавить метод equals, если это правильное решение. Если я это сделаю, я должен также переопределить hasCode() и добавить логику, чтобы проверить, не является ли значение значением null, и проверить каждое значение вручную. Кроме того, когда тест не выполняется, сообщение об ошибке, которое показывает фактическое и ожидаемое, будет не таким ясным. Так было интересно, есть ли лучшее решение. –
Вы можете использовать EqualsBuilder, HashCodeBuilder и ToStringBuilder в библиотеке Apocal commons-lang3. Это даст полезное сообщение об ошибке в случае сбоя. –