#java #unit-testing
#java #модульное тестирование
Вопрос:
Я пытаюсь создать полиномиальный калькулятор, чтобы научиться программировать, и когда я его тестирую, есть часть, которая терпит неудачу при сравнении двух одинаковых объектов, что для меня не имеет никакого смысла. Смотрите Следующий тестовый модуль, который терпит неудачу.
@Test
public void testAddition() {
P1 = new PolynomialImp("12x^2 5");
P2 = new PolynomialImp("16x^2 6");
Polynomial P3 = P1.add(P2);
Polynomial P4 = new PolynomialImp("28x^3 11");
assertTrue(P3.equals(P4));
}
Дело в том, что он завершается неудачей, даже когда я меняю тестер на следующий.
@Test
public void testAddition() {
P1 = new PolynomialImp("12x^3 5");
P2 = new PolynomialImp("16x^3 6");
Polynomial P3 = new PolynomialImp("28x^3 11");
Polynomial P4 = new PolynomialImp("28x^3 11");
assertTrue(P3.equals(P4));
}
Разве это не должно проходить, учитывая, что они оба созданы с одними и теми же переменными?
Комментарии:
1. Вы должны показать свой
PolynomialImp
класс.2. Первый тест завершается неудачей, потому
12x^2 16x^2
что make28x^2
— not28x^3
. Что касается второго тестового образца, невозможно определить, что не так, без какой-либо информации о реализацииPolynomialImp
класса и особенно егоequals()
метода.
Ответ №1:
Реализация по умолчанию выполняется equals()
только тогда, когда оба объекта являются одним и тем же объектом, поэтому только для P3.equals(P3) или если вы делаете
P3 = new ...
P4 = P3;
P3.equals(P4); // true
Если вам нужна эквивалентность, основанная на логике вашей программы (т.Е. 2 многочлена равны, если они инициализированы одной и той же строкой), вам нужно переопределить метод equals() вашего класса и реализовать эту логику самостоятельно.
Ответ №2:
P3.equals(P4)
проверяет, являются ли P3 и P4 одним и тем же экземпляром объекта. Вы должны переопределить equals
метод, чтобы вернуть true
или false
соответственно.
Комментарии:
1. Понятно. Поэтому каждый раз, когда я хочу сравнить два пользовательских объекта, которые я создаю, мне нужно переопределить метод equals, чтобы указать, как правильно сравнивать новые объекты?