单元测试:防止创建重复的对象

时间:2019-03-23 14:14:46

标签: java unit-testing

我的教授给了我们这项家庭作业,并创建了一个项目, 一堆单元测试。 我们的目标是确保我们可以通过那些单元测试。 我们有三节课。 名为Person的类,带有名称和年龄, 一个扩展人的班级演讲者, 以及也扩展了Person的班级与会者。 我在努力确保没有重复的人。 generateRandomString()由教授实施,只返回一个随机字符串。

我已经创建了课程, 是构造函数 吸气剂 和二传手。 我还覆盖了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.";
    }
}

1 个答案:

答案 0 :(得分:0)

如@JB Nizet所述,当您覆盖类的UITableViewDatasource方法时, 您必须覆盖1方法。 注意jUnit测试中的类名称: Hash Set。 这取决于equals方法。 解决方案:
一种。学习阅读Java API文档。 这是指向v8 JavaDocs的链接。 阅读hashCode页。
b。实现hashCode方法。 您显然可以访问互联网, 因此,如果您不知道如何实现HashSet方法, 尝试在Google搜索中搜索“如何实现Java hashCode方法”。

提示:字符串已经实现了hashCode方法。