如何断言对象与更好的错误相等。
让我们说我们有一类卡车:
import java.util.List;
public class Truck {
private String model;
private String make;
private int year;
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;
}
}
测试:
@Test
public void truckTest () {
Truck pickupTruck1 = new Truck("Big 10", "Chevy", 1976);
Truck pickupTruck2 = new Truck("Big 10", "Chevy", 1975);
//assertThat(pickupTruck1, equalTo(pickupTruck2));
//this error is not help full java.lang.AssertionError:
//Expected: <com.tests.tests.library.Truck@59c0fef4>
//but: was <com.tests.tests.library.Truck@da27335>
assertThat(pickupTruck1, samePropertyValuesAs(pickupTruck2));
}
Bellow错误很有用:
java.lang.AssertionError:
Expected: same property values as Truck [make: "Chevy", model: "Big 10", parts: null, year: <1975>]
but: year was <1976>
现在假设我们更新Truck对象有点复杂:
package com.tests.tests.library;
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;
}
}
添加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;
}
}
更新测试:
@Test
public void truckTest () {
Truck pickupTruck1 = new Truck("Big 10", "Chevy", 1976);
Truck pickupTruck2 = new Truck("Big 10", "Chevy", 1975);
List<TruckPartsObject> parts = new ArrayList<TruckPartsObject>();
TruckPartsObject truckPartsObject = new TruckPartsObject();
truckPartsObject.setName("part1");
parts.add(truckPartsObject);
pickupTruck1.setParts(parts);
assertThat(pickupTruck1, samePropertyValuesAs(pickupTruck2));
}
输出:
java.lang.AssertionError:
Expected: same property values as Truck [make: "Chevy", model: "Big 10", parts: null, year: <1975>]
but: parts was <[com.tests.tests.library.TruckPartsObject@11c03d7b]>
如何将最后一个输出修复为原始输出有用。它告诉我为什么对象不等于。希望使测试运行输出可读且易于调试。
I tried implementing equals method in the truck object but when the assert fails then then the message is still not helpful.
将卡车对象更新为等于方法:
@Override
public boolean equals(Object obj) {
Truck MyTruck = (Truck) obj;
if(this.year == MyTruck.year)
{
return true;
}
else
{
return false;
}
}
更新测试:
assertThat(pickupTruck1, equalTo(pickupTruck2));
输出:
java.lang.AssertionError:
Expected: <com.tests.tests.library.Truck@38862c65>
but: was <com.tests.tests.library.Truck@70ccb7e0>
答案 0 :(得分:2)
在任何情况下,为了获得良好的输出,您应始终覆盖operator(6) = "110"
operator(6) = operator(6 / 2) + (6 % 2)
= operator(3) + 0
= operator(3 / 2) + (3 % 2) + 0
= operator(1) + 1 + 0
= operator(1 / 2) + (1 % 2) + 1 + 0
= operator(0) + 1 + 1 + 0
= "" + 1 + 1 + 0
= "110"