EqualsVerifier can be used in Java unit tests to verify whether the contract for the equals and hashCode methods in a class is met. The Maven coordinates are:
<dependency>
<groupId>nl.jqno.equalsverifier</groupId>
<artifactId>equalsverifier</artifactId>
<version>2.4</version>
<scope>test</scope> </dependency>
For documentation, please see the project's website.
Pull requests are welcome! If you open one, please also register an issue or send a message to the Google Group, so we can discuss it.
Build
To build EqualsVerifier, you need Maven. Just call mvn clean verify
from the command-line, and you're done. Alternatively, you can use any IDE with Maven support.
Project structure
src/
nl.jqno.equalsverifier
External APInl.jqno.equalsverifier.internal
Classes internal to the operation of EqualsVerifiernl.jqno.equalsverifier.internal.checkers
Checkers that perform EqualsVerifier's actual verificationsnl.jqno.equalsverifier.internal.exceptions
Internally used exceptionsnl.jqno.equalsverifier.internal.prefabvalues
Cache and factories for instances of all typesnl.jqno.equalsverifier.internal.reflection
Helpers for reflection-based tasksnl.jqno.equalsverifier.internal.util
Various helpers
test/
javax.persistence
Annotations used by integration testsnl.jqno.equalsverifier
Unit tests for specific subcomponents of EqualsVerifiernl.jqno.equalsverifier.coverage
Code coverage tests, which fail if coverage is less than 100%nl.jqno.equalsverifier.integration.basic_contract
Integration tests that cover the contract as stated injava.lang.Object
's javadocnl.jqno.equalsverifier.integration.extended_contract
Integration tests that cover specific corner cases in the Java language, and other essential points that are discussed in other sources, such as Effective Java, but not in the javadocnl.jqno.equalsverifier.integration.extra_features
Integration tests that cover non-standard situations that EqualsVerifier supportsnl.jqno.equalsverifier.integration.inheritance
Integration tests that cover inheritance in equality relationsnl.jqno.equalsverifier.integration.operational
Integration tests that cover issues that don't pertain to equals or hashCode themselves, but to EqualsVerifier's operationnl.jqno.equalsverifier.testhelpers
Utility classes for use in testsnl.jqno.equalsverifier.testhelpers.annotations
Annotations used by unit tests and integration testsnl.jqno.equalsverifier.testhelpers.annotations.casefolding
More annotations which would clash with other annotations because of casingnl.jqno.equalsverifier.testhelpers.types
Various data classes for use in unit tests and integration testsnl.jqno.equalsverifier.util
Unit tests for the reflection helpers
lib/
equalsverifier-signedjar-test.jar
A local Maven repository containing a signed jar, used to test potential ClassLoader issues
Here's how to install a jar into it:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \ -Dfile= -DgroupId= \ -DartifactId= -Dversion= \ -Dpackaging= -DcreateChecksum=true \ -DlocalRepositoryPath=lib
The signed jar itself can be found in this repo.
Disclaimer
Copyright 2009-2017 Jan Ouwens