10

是否有任何工具/库可以自动为我的哈希码生成测试,并查看这些方法中涉及的实例变量的 equals 方法?

4

5 回答 5

7

Guava 使用这个测试生成器来测试equalshashCode.

于 2012-05-17T09:51:18.730 回答
3

toString()不应该有任何“合同”要尊重,所以单元测试会很奇怪而且没用。

您可以查看有关equals().

还有一个 JUnit 插件EqualsHashCodeTestCase


在同一主题上:

于 2012-05-17T09:31:47.450 回答
2

EqualsVerifier是一个很棒的库。我经常将它与Reflections库结合使用,以自动扫描某些类并立即测试所有类的合约:

 @Test
  public void validateEqualsHashCodeToString() {
    final Reflections dtoClassesReflections = new Reflections(new ConfigurationBuilder()
      .setUrls(ClasspathHelper.forPackage("my.base.package"))
      .filterInputsBy(new FilterBuilder()
        .include(".*Dto.*") // include all Dto classes
        .exclude(".*Test.*")) // exclude classes from tests which will be scanned as well
      .setScanners(new SubTypesScanner(false)));

    final Set<Class<?>> allDtoClasses = dtoClassesReflections.getSubTypesOf(Object.class);

    allDtoClasses.forEach(dtoClass -> {
      logger.info("equals/hashCode tester testing: " + dtoClass);
      EqualsVerifier.forClass(dtoClass).verify();

      try {
        dtoClass.getDeclaredMethod("toString");
      } catch (NoSuchMethodException e) {
        fail(dtoClass + " does not override toString() method");
      }
    });
  }
于 2017-04-19T12:03:23.337 回答
1

我会推荐EqualsVerifier来测试哈希码和 equals 方法。

我会推荐ToStringVerifier来测试 toString 方法

这是一个例子:

@Test
public void testToString()
{
    ToStringVerifier.forClass(User.class).verify();
}
于 2018-08-28T10:54:03.887 回答
-1

您可以使用 Apache EqualsBuilder 和 HashCodeBuilder 来实现 equals 和 hashCode,从而最大限度地降低不正确执行的风险。

测试equals很简单,创建两个实例值相同的实例(您会期望它们相等)并在一个实例上调用equals并将另一个作为参数传递,您应该期望它返回true:D

于 2012-05-17T10:44:58.017 回答