사용자 도구

사이트 도구


java:equals_verifier

Equals Verifier

  • Java 클래스의 equalshashCode 메소드는 일반적으로 자동 생성하는 방식을 사용하는데 Java Code Coverage에서 매우 많은 커버리지를 깎아먹는 부분이다. 이에 equalshashCode에 대해 자동 테스트를 하여 커버리지를 높여주는 역할을 한다.
  • 이름은 EqualsVerifier이지만 hashCode까지 처리한다.
  • 테스트를 실행했는데 오류가 발생하면 http://www.jqno.nl/equalsverifier/errormessages 에 가서 오류 메시지를 찾아서 해결책을 보고 따라하면 해결이 된다.

Lombok equals hashCode 테스트

  • EqualsVerifierExample이라는 Lombok @Data 애노테이션이 적용된 클래스가 있을 때
    @Test
    public void equalsAndHashCodeContract() throws Exception {
        class SubEqualsVerifierExample extends EqualsVerifierExample {
            @Override
            public boolean canEqual(Object obj) {
                return false;
            }
        }
        EqualsVerifier.forClass(EqualsVerifierExample.class)
            .suppress(Warning.NULL_FIELDS, Warning.NONFINAL_FIELDS)
            .withRedefinedSubclass(SubEqualsVerifierExample.class)
            .verify();
    }
  • 커버리지가 낮게 나오면 suppress 부분을 제거하고 해본다.

IntelliJ Live Template

java

class Sub$CLASS$ extends $CLASS$ {
	@Override
	public boolean canEqual(Object obj) {
		return false;
	}
}
EqualsVerifier.forClass($CLASS$.class)
	.suppress(Warning.NULL_FIELDS, Warning.NONFINAL_FIELDS)
	.withRedefinedSubclass(Sub$CLASS$.class)
	.verify();
  • Applicable in Java: statement
  • Reformat according to style : check
  • Use static import if possible : check
  • Short FQ names : check

Groovy Spock

static class Sub$CLASS$ extends $CLASS$ {
	@Override
	boolean canEqual(Object obj) {
		return false
	}
}
 
def "equalsAndHashCode verify"() {
	expect:
	EqualsVerifier.forClass($CLASS$.class)
		.suppress(nl.jqno.equalsverifier.Warning.NONFINAL_FIELDS, nl.jqno.equalsverifier.Warning.ALL_FIELDS_SHOULD_BE_USED)
		.withRedefinedSubclass(Sub$CLASS$.class)
		.withRedefinedSuperclass()
		.verify()
}
  • Applicable in Spock Specification
  • Reformat according to style : check
  • Use static import if possible : check
  • Short FQ names : check
java/equals_verifier.txt · 마지막으로 수정됨: 2018/05/02 10:50 저자 kwon37xi