簡體   English   中英

為hashcode,equals和toString方法生成單元測試

[英]Generate unit tests for hashcode,equals and toString methods

是否有任何工具/庫可以自動生成我的哈希碼的測試,並等於查看這些方法中涉及的實例變量的方法?

Guava使用測試構建器來測試equalshashCode

toString()不應該有任何“契約”要尊重,所以單元測試它會很奇怪而且沒用。

你可以看看有關equals()這個項目

還有一個JUnit Addon EqualsHashCodeTestCase


在同一主題上:

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");
      }
    });
  }

我建議使用EqualsVerifier來測試哈希碼和equals方法。

我建議使用ToStringVerifier來測試toString方法

這是一個例子:

@Test
public void testToString()
{
    ToStringVerifier.forClass(User.class).verify();
}

您可以使用Apache EqualsBuilder和HashCodeBuilder來實現equals和hashCode,從而最大限度地降低未正確執行的風險。

測試equals很簡單,創建兩個實例值相同的實例(你希望它們相等)並在一個實例上調用equals傳遞另一個作為參數,你應該期望它返回true:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM