사용자 도구

사이트 도구


java:equals_verifier

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:equals_verifier [2014/07/08 16:13]
kwon37xi [Lombok equals hashCode 테스트]
java:equals_verifier [2018/05/02 10:50] (현재)
kwon37xi [Groovy Spock]
줄 3: 줄 3:
   * Java 클래스의 ''equals''와 ''hashCode'' 메소드는 일반적으로 자동 생성하는 방식을 사용하는데 Java Code Coverage에서 매우 많은 커버리지를 깎아먹는 부분이다. 이에 ''equals''와 ''hashCode''에 대해 자동 테스트를 하여 커버리지를 높여주는 역할을 한다.   * Java 클래스의 ''equals''와 ''hashCode'' 메소드는 일반적으로 자동 생성하는 방식을 사용하는데 Java Code Coverage에서 매우 많은 커버리지를 깎아먹는 부분이다. 이에 ''equals''와 ''hashCode''에 대해 자동 테스트를 하여 커버리지를 높여주는 역할을 한다.
   * 이름은 ''EqualsVerifier''이지만 ''hashCode''까지 처리한다.   * 이름은 ''EqualsVerifier''이지만 ''hashCode''까지 처리한다.
 +  * 테스트를 실행했는데 오류가 발생하면 http://www.jqno.nl/equalsverifier/errormessages 에 가서 오류 메시지를 찾아서 해결책을 보고 따라하면 해결이 된다.
 +
  
 ===== Lombok equals hashCode 테스트 ===== ===== Lombok equals hashCode 테스트 =====
   * ''EqualsVerifierExample''이라는 Lombok ''@Data'' 애노테이션이 적용된 클래스가 있을 때<code java>   * ''EqualsVerifierExample''이라는 Lombok ''@Data'' 애노테이션이 적용된 클래스가 있을 때<code java>
 @Test @Test
-public void equalsContract() throws Exception { +public void equalsAndHashCodeContract() throws Exception { 
- class SubEqualsVerifierExample extends EqualsVerifierExample { +    class SubEqualsVerifierExample extends EqualsVerifierExample { 
- @Override +        @Override 
- public boolean canEqual(Object obj) { +        public boolean canEqual(Object obj) { 
- return false; +            return false; 
- }+        } 
 +    } 
 +    EqualsVerifier.forClass(EqualsVerifierExample.class) 
 +        .suppress(Warning.NULL_FIELDS, Warning.NONFINAL_FIELDS) 
 +        .withRedefinedSubclass(SubEqualsVerifierExample.class) 
 +        .verify(); 
 +
 +</code> 
 +  * 커버리지가 낮게 나오면 ''suppress'' 부분을 제거하고 해본다. 
 + 
 +===== IntelliJ Live Template ===== 
 +==== java ==== 
 +<code java> 
 +class Sub$CLASS$ extends $CLASS$ { 
 + @Override 
 + public boolean canEqual(Object obj) { 
 + return false;
  }  }
- EqualsVerifier.forClass(EqualsVerifierExample.class).suppress(Warning.NONFINAL_FIELDS).withRedefinedSubclass(SubEqualsVerifierExample.class).verify(); 
 } }
 +EqualsVerifier.forClass($CLASS$.class)
 + .suppress(Warning.NULL_FIELDS, Warning.NONFINAL_FIELDS)
 + .withRedefinedSubclass(Sub$CLASS$.class)
 + .verify();
 </code> </code>
 +  * Applicable in Java: statement
 +  * Reformat according to style : check
 +  * Use static import if possible : check
 +  * Short FQ names : check
  
 +==== Groovy Spock ====
 +<code groovy>
 +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()
 +}
 +</code>
  
 +  * Applicable in Spock Specification
 +  * Reformat according to style : check
 +  * Use static import if possible : check
 +  * Short FQ names : check
java/equals_verifier.1404803580.txt.gz · 마지막으로 수정됨: 2014/07/08 16:13 저자 kwon37xi