如何使用hamcrest断言对象是相等的

时间:2015-05-18 22:30:58

标签: testing assert assertions hamcrest rest-assured

我想编写测试,检查两个对象是否相同。当断言失败时,我想知道哪些字段相同,哪些字段不相同。我可以对每一个领域做出断言但是想知道是否有办法来主持这些对象。

卡车类:

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 个答案:

答案 0 :(得分:2)

感谢波纹管解决方案的同事:

使用Shazamcrest(https://github.com/shazam/shazamcrest

断言(pickupTruck1,sameBeanAs(pickupTruck2));