2010-04-01 3 views
2

XStream을 사용하는 클래스가 있고 내 응용 프로그램의 전송 형식으로 사용됩니다. 이 전송 형식을 다른 메시징 표준과 매핑하는 다른 클래스의 테스트를 작성하고 있습니다. 새 필드가 추가되면 내 테스트에서 해당 필드가 제대로 검사되는지 확인하기 위해 클래스 내의 모든 getter가 테스트 내에서 호출되도록하고 싶습니다.모든 getter 메소드가 JUnit 테스트에서 호출되었는지 확인하십시오.

@XStreamAlias("thing") 
public class Thing implements Serializable { 
private int id; 
private int someField; 

public int getId(){ ... } 
public int someField() { ... } 
} 

그래서 지금은 업데이트 할 경우 XStream을 클래스의 대략적인 윤곽이 클래스가되게합니다 :

@XStreamAlias("thing") 
public class Thing implements Serializable { 
private int id; 
private int someField; 
private String newField; 

public int getId(){ ... } 
public int getSomeField() { ... } 
public String getNewField(){ ... } 
} 

내 테스트가 실패 할 것이다 이전 테스트 getNewField()를 호출하지 않기 때문에 .

목표는 새로운 게터가 추가되면 테스트에서 해당 게이터를 확인하는 몇 가지 방법을 보장하는 것입니다.

이상적으로는 테스트에 전적으로 포함되며 기본 Thing 클래스를 수정할 필요가 없습니다.

아이디어가 있으십니까? 보고 주셔서 감사합니다!

+1

쉬운. 방법을 테스트하지 마십시오. 그것들은 테스트하기에는 너무 단순합니다. – Pyrolistical

답변

5

코드 커버리지 도구가 필요할 수 있습니다. 코드 적용 범위가 100 %이면 모든 get 메소드가 호출되었습니다. Eclipse를 사용하는 경우 EclEmma 플러그인을 확인하십시오.

+0

쓰레기. StackOverflow에서 "stupid-helmet"배지가 필요합니다. Emma가 설치되어 있고 다른 프로젝트에서 사용하고 있습니다. 상기 알림 하 주셔서 감사합니다. – Freiheit

0

Sonar을 사용할 수 있습니다. 나는 그것을 매우 유용하고 쉽게 설정할 수 있습니다. 허드슨과 쉽게 통합 할 수 있습니다. 그들은 또한 plugin 일식을 가지고 있습니다.

0

JUnit보다 자동으로 테스트를 테스트하려는 경우 좋은 옵션이 아닙니다. "특수 검사"가 다른 모든 검사 후에 마지막으로 항상 호출되도록하려면 어떻게해야합니까? (JUnit 모델/철학에 대한 테스트 케이스는 서로 독립적이어야한다고 말하지는 않는다.).

가능성이 있다면 가능성있는 것은 Cobertura 코드 커버리지 보고서를 생성하고 분석하는 동안 모든 getter가 다루어 졌는지 찾아내는 것입니다. 아마도 출력 보고서 파일에 의존하는 대신 API를 통해 Cobertura와 상호 작용할 수있는 방법이있을 수도 있습니다.

예 알고리즘 :

  1. 실행 정기적으로 테스트 스위트
  2. 실행 Cobertura
  3. 실행 특별한 테스트 케이스는 메타 시험에 대해 얘기처럼 소리
0

- (A)의 테스트를 테스트. IMHO 이해가되지 않습니다. 테스트는 사양입니다. 따라서 테스트 케이스의 개발자는 새 필드를 추가 할 때 테스트를 업데이트해야합니다. 즉, 자바 빈의 모든 getter 메소드를 호출하는 빈민가 방법이 있습니다.

public class GhettoBeanTest { 
    private static class Subclass extends SomeObject { 
     @Override public String toString() { 
      return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this); 
     } 
    } 

    @Test public void ensureToStringMethodExecutes() { 
     String value = new Subclass().toString(); 

     // teset passed - all getter methods were executed by the toString method above 
    } 
} 
0

내가 그런 편지를 써서, 당신은 그것을 here 찾을 수 있습니다. 개체의 프록시를 만들어 모든 호출을 가로 채고 나중에 확인할 수 있도록합니다.

관련 문제