Модульное тестирование: предотвращение создания дублированных объектов - PullRequest
0 голосов
/ 23 марта 2019

Мой профессор дал нам это домашнее задание и создал проект с куча юнит-тестов. Наша цель - убедиться, что мы можем пройти эти юнит-тесты. У нас есть три класса. Класс под названием Человек с именем и возрастом, спикер класса, который расширяет Person, и класс Attendee, который также расширяет 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 голосов
/ 23 марта 2019

Как упоминалось @JB Nizet, когда вы переопределяете метод equals класса, Вы должны переопределить метод hashCode. Обратите внимание на имя класса в тесте jUnit: Хэш Set. Это зависит от метода hashCode. Решение:
а. Научитесь читать документы по API Java. Вот ссылка на v8 JavaDocs . Прочитайте страницу HashSet.
б. Реализуйте метод hashCode. У вас явно есть доступ в Интернет, так что, если вы не знаете, как реализовать метод hashCode, попробуйте поискать в Google "как реализовать метод hashCode в Java".

Подсказка: String уже реализует метод hashCode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...