我正在编写很多单元测试,它们使用不同的类来执行类似的操作。
我想比较同一类的集合。该类指定id属性。在集合A中,此属性全为空。在Set B中,此属性已设置。 (已将B集持久保存到数据库并已填充uid)。
对于我的单元测试,我想确保Set A与Set B匹配,我显然不希望它看到id字段。
最有效,干净和干燥的方法是什么?
答案 0 :(得分:1)
首先,比较两组的大小,如果它们不相等,则测试失败。
对于非平凡的情况,请为设置元素定义java.util.Comparator
,根据此比较器对两者进行排序(您可以包含/省略您不想比较的属性)。然后迭代两个集合,根据你的规则比较元素(不同于比较器定义的元素,如果我理解你的观点)。
我假设您已经正确定义了equals
和hashCode
方法,并且不希望为了测试而更改它们。
答案 1 :(得分:0)
你需要覆盖类的hashCode()和equals()方法,你不应该在方法中包含id字段,然后equals方法Set将按照你想要的方式工作。
例如,
class Test{
int id;
String name;
String other;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((other == null) ? 0 : other.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (this.other == null) {
if (other.other != null)
return false;
} else if (!this.other.equals(other.other))
return false;
return true;
}
}
现在,Test类对象不依赖于ID。您可以使用像Eclipse这样的IDE轻松生成equlas和hashCode方法。
答案 2 :(得分:0)
您可以覆盖equals()
&您的类中使用hashCode()
方法,然后使用removeAll()
方法从Set B
中删除所有元素。发布这个,如果集合为空,那么它们匹配,否则它们不匹配。
请注意,重写的方法应该具有逻辑,不涉及id
。
答案 3 :(得分:0)
使用 equals()方法在Java中实现重复项逻辑的比较。
myString.equals(“比较这个”);
当您需要比较您的客户类型的对象时,您必须覆盖equals方法。
Student student1=new Student();
Student student2=new Student();
student1.equals(student2);
但是当你重写equals()方法时要小心。您需要根据一些独特的ID提供一些比较基础。例如,以下实现使用Roll编号作为唯一ID进行比较
public class Student {
private int rollNo;
private String name;
private String address;
// Getters and Setters
@Override
public int hashCode() {
// Overide this only when you use Hashing implementations
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
System.out.println("Not Equal due to NULL");
return false;
}
if (this == obj) {
System.out.println("Equals due to same reference");
return true;
}
if (getClass() != obj.getClass()) {
System.out.println("Different Type");
return false;
}
Student other = (Student) obj;
if (rollNo == other.rollNo) {
System.out.println("RollNo " + rollNo + " EQUALS " + other.rollNo);
return true;
}
if (rollNo != other.rollNo) {
System.out.println("RollNo " + rollNo + " NOT EQUALS " + other.rollNo);
return false;
}
System.out.println("Default is FALSE");
return false;
}
}