Тестирование класса, который расширяется от общего абстрактного класса

#java #unit-testing #junit #junit5

#java #модульное тестирование #юнит #junit5

Вопрос:

Что ж, это первый раз, когда я провожу тестирование. Код, который у меня есть, следующий:

 public abstract class Value<T>
{
    private T value;

    public Value(T aValue) {
        this.value = value;
    }

    public T value() {
        return value;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Value<?> that = (Value<?>) o;
        return Objects.equals(value, that.value);
    }

    @Override
    public int hashCode() {
        return Objects.hash(value);
    }
}
 

Затем я создаю класс, расширяющийся от вышеупомянутого класса:

 public class DateOfBirth extends Value<LocalDate>
{
    private DateOfBirth(LocalDate aDate) {
        super(aDate);
    }

    public static DateOfBirth of(LocalDate aDate) {
        return new DateOfBirth(aDate);
    }
}
 

Наконец я запустил следующий текст, но он не прошел.

 public class DateOfBirthUnitTest
{
    @Test
    public void birthDateShouldBeInstanceFromLocalDate() {
        DateOfBirth theActual = DateOfBirth.of(LocalDate.of(1997, 12, 10));

        assertNotNull(theActual.value()); //This test is failing
    }
}
 

Почему вызов «theActual.value()» возвращает нулевое значение? Как я могу это решить?

Спасибо.

Комментарии:

1. Я предлагаю использовать хорошую среду разработки, такую как eclipse, IntelliJ, и использовать такие инструменты, как SonarLint, он найдет такие ошибки для вас, как только вы сохраните код…

Ответ №1:

Ошибка ввода …??

изменить

  public Value(T aValue) {
    this.value = value;
}
 

Для

  public Value(T value) {
    this.value = value;
}
 

и это должно сработать!