2015-05-18 6 views
1

Я хочу написать тест, где он проверяет, являются ли два объекта одинаковыми. Когда утверждение терпит неудачу, я хочу знать, какие поля такие же, а какие нет. Я могу утверждать на каждом поле, но задавался вопросом, есть ли способ скомпоновать объекты.Как утверждать объекты равны с использованием 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 имеют то же самое?

+1

Объект 'Truck' намеренно не имеет метода' equals', или он просто не отображается здесь? – Mureinik

+0

У него нет метода equals. Я могу добавить метод equals, если это правильное решение. Если я это сделаю, я должен также переопределить hasCode() и добавить логику, чтобы проверить, не является ли значение значением null, и проверить каждое значение вручную. Кроме того, когда тест не выполняется, сообщение об ошибке, которое показывает фактическое и ожидаемое, будет не таким ясным. Так было интересно, есть ли лучшее решение. –

+0

Вы можете использовать EqualsBuilder, HashCodeBuilder и ToStringBuilder в библиотеке Apocal commons-lang3. Это даст полезное сообщение об ошибке в случае сбоя. –

ответ

Смежные вопросы