我的教授给了我们这个家庭作业,并创建了一个带有大量单元测试的项目。我们的目标是确保我们可以通过这些单元测试。我们有三节课。一个名为Person的类,其名称和年龄,一个扩展Person的类,以及一个也扩展Person的类Attendee。我正在努力确保没有重复的人。 generateRandomString()
由教授实施,只返回一个随机字符串。
我已经创建了类,它是构造函数,getter和setter。我也在类equals()
中覆盖Person
方法
这是我们教授给我们的考验:
@Test
public void testNoDuplicatePerson() {
HashSet<Person> people = new HashSet<Person>();
String name = generateRandomString();
Person p = new Speaker(name);
people.add(p);
assertEquals(1,people.size());
p = new Attendee(name);
people.add(p);
assertEquals(1,people.size());
}
我怎样才能通过这个测试?
编辑:我决定发布三个类的代码:
Person
```java
public abstract class Person {
private String name;
private int age;
public Person(String name) {
this.name = name;
this.age = 0;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Object o) {
if (o == null || !(o instanceof Person))
return false;
Person converted = (Person) o;
if (this.getName().equals(converted.getName()) && this.getAge() == converted.getAge())
return true;
return false;
}
}
扬声器:
public class Speaker extends Person {
private int fee;
public Speaker(String name) {
super(name);
this.fee = 0;
}
public Speaker(String name, int age) {
super(name, age);
this.fee = 0;
}
public Speaker(String name, int age, int fee) {
super(name, age);
this.fee = fee;
}
public int getFee() {
return fee;
}
public void setFee(int fee) {
this.fee = fee;
}
public String toString() {
return "Speaker " + this.getName() + " as a fee value of " + this.getFee() + ".";
}
}
与会者:
public class Attendee extends Person {
private boolean paid;
public Attendee(String name) {
super(name);
this.paid=false;
}
public Attendee(String name, int age) {
super(name, age);
this.paid=false;
}
public boolean hasPaid(){
if (this.paid==true)
return true;
return false;
}
public String toString(){
return "Attendee "+this.getName()+(this.hasPaid() ? " has":" hasn't")+" paid its registration.";
}
}
正如@JB Nizet所提到的,当你覆盖类的equals
方法时,你必须覆盖hashCode
方法。请注意jUnit测试中类的名称:HashSet。这取决于hashCode
方法。解:
一个。学习阅读java API文档。这是v8 JavaDocs的链接。阅读HashSet
页面。
湾实现hashCode
方法。您显然可以访问Internet,因此,如果您不知道如何实现hashCode
方法,请尝试谷歌搜索“我如何实现Java hashCode方法”。
提示:String已经实现了hashCode方法。