2017-01-11 4 views
0

추상 클래스의 구체적인 방법에 반영되는 cobertura 분기 적용 문제를 해결하려면 어떻게해야합니까?추상 클래스 인 Java 수퍼 클래스에서 분기 적용

아래 코드에서 Currency 추상 클래스의 equals 메소드에는 (getClass()! = obj.getClass()) 조건 뒤에 오는 변수 SID 및 Ab가 있는지 확인하는 부분이 들어 있습니다. 이 부분은

 @Override  
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     final Currency other = (Currency) obj; 
     if (this.getAb() == null) { 
      if (other.Ab() != null) 
       return false; 
     } else if (!this.getAb().equals(other.getAb())) 
      return false; 
     if (this.getSID() < 1 || (this.getSID() != other.getSID())) 
      return false; 
     return true; 
     } 

나는 아래의 방법을 사용하여 테스트 클래스에서 이러한 변수를 충당하기 위해 노력 덮여 결코 극복하지만 여전히 적용되지 않습니다

테스트 클래스 :

Currency currency = new Currency() { 
     @Override 
     public boolean equals(Object obj) { 
      return super.equals(obj); 
     } 
    }; 

    Currency currency1 = new Currency() { 
     @Override 
     public boolean equals(Object obj) { 
      return super.equals(obj); 
     } 
    };  

    currency.setAb("SE3421"); 
    currency1.setAb("SE3421"); 
    assertFalse(currency.equals(currency1)); 
    assertTrue((currency1.getAb()).equals(currency.getAb())); 

어떤 도움을 주셔서 감사합니다.

답변

0

나는 이와 같은 새로운 테스트 방법을 추가 할 것이다.

@test 
public void test_equals() { 
    Currency currency = new Currency() { }; 
    assertFalse(currency.equals(new String())); 
} 

또 다른 의견 : 실제로 hashCode 메소드도 구현해야합니다.

hashCode()에서는 equals (Object) 메서드에 따라 두 객체가 같으면 두 객체 각각에서 hashCode 메서드를 호출하면 같은 정수 결과를 생성해야합니다. hashCode()가 아닌 equals()를 오버라이드하고 클래스가이 계약을 위반하면

+0

이 계약서는 수퍼 클래스의 equals (일반) 구현을 검토 할 수 있습니다 ... –

+0

Will mockito help 이 상황에서 또는 테스트 클래스 안에 작성된 통화 구현 내에서 hashcode 메소드를 재정 의하여 수행 할 수 있습니까? – snlx