by jqno

EqualsVerifier can be used in Java unit tests to verify whether the contract for the equals and hash...

466 Stars 70 Forks Last release: Not found Apache License 2.0 1.9K Commits 93 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Apache License 2.0 Maven Central Javadoc

Build Status Dependabot SemVer stability

Issue resolution

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:



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.



To build EqualsVerifier, you need Maven. Just call

from the command-line, without any parameters, and you're done. Alternatively, you can use any IDE with Maven support.


EqualsVerifier uses Google Java Format to format Java files. You can call it using

(without any parameters), which will also run the tests and all the other static analysis. Or run
mvn com.coveo:fmt-maven-plugin:format
to only run the formatter.

Project structure

  • nl.jqno.equalsverifier
    External API
  • nl.jqno.equalsverifier
    Supporting classes for the external API that aren't used in client code directly
  • nl.jqno.equalsverifier.internal
    Classes internal to the operation of EqualsVerifier
  • nl.jqno.equalsverifier.internal.checkers
    Checkers that perform EqualsVerifier's actual verifications
  • nl.jqno.equalsverifier.internal.exceptions
    Internally used exceptions
  • nl.jqno.equalsverifier.internal.prefabvalues
    Cache and factories for instances of all types
  • nl.jqno.equalsverifier.internal.reflection
    Helpers for reflection-based tasks
  • nl.jqno.equalsverifier.internal.util
    Various helpers

  • javax.persistence
    Annotations used by integration tests
  • nl.jqno.equalsverifier
    Unit tests for specific subcomponents of EqualsVerifier
  • nl.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 in
    's javadoc
  • nl.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 javadoc
  • nl.jqno.equalsverifier.integration.extra_features
    Integration tests that cover non-standard situations that EqualsVerifier supports
  • nl.jqno.equalsverifier.integration.inheritance
    Integration tests that cover inheritance in equality relations
  • nl.jqno.equalsverifier.integration.operational
    Integration tests that cover issues that don't pertain to equals or hashCode themselves, but to EqualsVerifier's operation
  • nl.jqno.equalsverifier.testhelpers
    Utility classes for use in tests
  • nl.jqno.equalsverifier.testhelpers.annotations
    Annotations used by unit tests and integration tests
  • nl.jqno.equalsverifier.testhelpers.annotations.casefolding
    More annotations which would clash with other annotations because of casing
  • nl.jqno.equalsverifier.testhelpers.types
    Various data classes for use in unit tests and integration tests
  • nl.jqno.equalsverifier.util
    Unit tests for the reflection helpers

  • 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=<path-to-file> -DgroupId=<myGroup> \
                           -DartifactId=<myArtifactId> -Dversion=<myVersion> \
                           -Dpackaging=<myPackaging> -DcreateChecksum=true \
    The signed jar itself can be found in this repo.


Copyright 2009-2020 Jan Ouwens

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.