tgoop.com/java_geek/361
Create:
Last Update:
Last Update:
🧪 Java: тестируем equals() и hashCode() правильно
Сегодня хочу поделиться небольшой, но важной практикой для всех, кто пишет Java-код: проверка корректной реализации equals() и hashCode().
Когда ты переопределяешь эти методы (например, в Entity или DTO), важно убедиться, что они соответствуют контракту и не подводят в коллекциях. Иначе можно словить баг, который очень трудно отследить.
🧰 Как это протестировать:
Используем библиотеку EqualsVerifier — она делает всю грязную работу за нас:
import nl.jqno.equalsverifier.EqualsVerifier;
public class PersonTest {
@Test
void equalsContract() {
EqualsVerifier.forClass(Person.class).verify();
}
}
📌 Почему это важно:
- Set, Map, List.contains() и другие структуры полагаются на корректную реализацию этих методов.
- EqualsVerifier проверит: симметрию, транзитивность, согласованность, null и многое другое.
- Он даже предупредит, если ты не добавил final или если поле не включено в сравнение.
🧠 Советы:
- Не пиши equals() вручную — используй Objects.equals() и Objects.hash().
- Если используешь Lombok, просто добавь
@EqualsAndHashCode.Пиши в комментах, сталкивался ли ты с багами из-за equals()`/`hashCode()? Как ты их находил?
👉 @java_geek
BY Java Geek
Share with your friend now:
tgoop.com/java_geek/361
