getter 및 setter를 자동 테스트하는 Java 단위 테스트 프레임워크가 있습니까?[닫은]

StackOverflow https://stackoverflow.com/questions/108692

  •  01-07-2019
  •  | 
  •  

문제

사소한 getter/setter 메소드를 테스트해야 하는지 여부에 대한 Java(및 다른 커뮤니티)에는 잘 알려진 논쟁이 있습니다.일반적으로 이는 코드 적용 범위와 관련이 있습니다.이것이 공개 토론이라는 점에 동의하고 여기서 답변하려고 하지 마십시오.

Java 리플렉션을 사용하여 이러한 메서드를 자동 테스트하는 방법에 대한 여러 블로그 게시물이 있습니다.

어떤 프레임워크(예:jUnit)가 그런 기능을 제공하나요?예를 들어"이 테스트 T는 클래스 C의 모든 getter/setter가 표준이라고 주장하기 때문에 자동 테스트해야 합니다"라는 주석입니다.

제가 보기엔 가치가 더해질 것 같고, 구성 가능하다면 '토론'은 사용자에게 옵션으로 남겨질 것 같습니다.

도움이 되었습니까?

해결책

유니틸 정적 메서드를 사용하여 이 작업을 수행합니다. assertRefEquals.

다른 팁

나는 이 작업을 수행하는 쉽게 사용할 수 있는 라이브러리나 클래스를 알지 못합니다.이는 주로 나는 그러한 테스트에 강력하게 반대하는 편이기 때문에 신경 쓰지 않기 때문일 수 있습니다.그러니까 거기에 물어봐도 ~ 해야 하다 이 견해에 대한 약간의 정당성이 있습니다.

자동 테스트 getter 및 setter가 코드 품질이나 적용 범위에 도움이 될지 의심됩니다.이러한 메서드는 다른 코드에서 사용되며 거기에서 테스트됩니다.100% 커버됨) 또는 전혀 사용되지 않음(제거 가능).결국 getter와 setter는 테스트에서는 사용되지만 애플리케이션의 다른 곳에서는 사용되지 않으므로 그대로 두게 됩니다.

이러한 테스트를 작성하는 것은 쉬워야 합니다.Apache Commons BeanUtils를 사용하지만 다른 좋은 테스트가 있다면 실제로 필요한지 의심됩니다.

나는 오픈포조 이를 해결하기 위한 프로젝트 정확한 문제.

이 프로젝트를 통해 다음을 검증할 수 있습니다.

  • Pojo 코딩 표준 시행(예:모든 필드는 비공개이거나 기본 변수가 없습니다. 등)
  • Pojo 동작 시행(예:setter는 설정만 수행하고 변환은 수행하지 않습니다.)
  • Pojo ID 확인(예:주석 기반 동등성 및 해시코드 생성 사용)

튜토리얼 보기

대부분의 경우 setter와 getter는 내부 필드를 설정하고 가져오는 것 이상의 작업을 수행합니다.객체는 유효한 값만 보유하고 있는지 내부 규칙을 확인해야 합니다.예를 들어

  • null 값이 가능합니까?
  • 빈 문자열이 가능합니까?
  • 아니면 음수 값인가요?
  • 아니면 0 값인가요?
  • 또는 목록의 값이 유효합니까?
  • 아니면 최대값이 있나요?
  • 아니면 BigDecimal 값에 최대 정밀도가 있습니까?

단위 테스트는 유효하지 않은 값이 있는 경우 동작이 올바른지 확인해야 합니다.이는 자동화할 수 없습니다.

setter 및 getter에 논리가 없으면 응용 프로그램의 어느 곳에서나 사용해야 합니다.개체가 보다 복잡한 테스트를 위한 매개변수인 테스트를 작성하세요.그런 다음 목록의 다른 값으로 테스트할 수 있습니다.

getter 및 setter가 아닌 비즈니스 논리를 테스트하십시오.결과에는 getter 및 setter도 포함되어야 합니다.공용 라이브러리만 있는 경우에도 메소드는 비즈니스 로직의 결과여야 합니다.getter 및 setter에 코드 적용 범위가 없으면 제거하십시오.

나는 그런 일을했습니다.객체를 취하고 모든 getter 및 setter 메소드를 테스트하는 간단한 Java 클래스입니다.http://sourceforge.net/projects/getterandsetter/

나는 가능한 한 getter 및 setter 메소드를 피해야 한다고 생각합니다. 그러나 그것들이 주변에 있고 테스트하는 데 두 줄이 걸리는 한 그렇게 하는 것이 좋습니다.

코드 적용 범위보다 OO 디자인을 선호하고 해당 필드를 필요한 클래스로 이동할 수 없는지 확인하겠습니다.그래서 이전에 제안한 대로 해당 getter와 setter를 제거할 수 있는지 확인하려고 합니다.게터와 세터는 캡슐화 깨기.

이 라이브러리가 귀하의 질문에 대한 답변인 것 같습니다

모든 Bean의 초기 값을 테스트합니다. setters, getters, hashCode(), equals() and toString().당신이 해야 할 일은 기본값과 기본값이 아닌 속성/값의 맵을 정의하는 것뿐입니다.

또한 기본이 아닌 추가 생성자를 사용하여 Bean인 개체를 테스트할 수도 있습니다.

나는 openpojo를 시험해 보고 있다

타이어를 걷어찼는데 제 역할을 하는 것 같습니다.

  1. 이를 통해 프로젝트의 모든 pojo를 확인할 수 있습니다.
  2. pojo의 모범 사례를 확인하는 것 같습니다.

빠른 시작을 위해 이 튜토리얼을 확인하세요지도 시간

이전 댓글에 대한 답변 @나 내 평판 때문에 여기 왔어.

Vlookward, getter/setter를 작성하지 않는 것은 전혀 의미가 없습니다.비공개 필드를 설정하는 유일한 옵션은 명시적인 설정자를 사용하거나, 생성자에서 설정하거나, 다른 방법을 통해 간접적으로 설정하는 것입니다(기능적으로 설정자를 다른 위치로 연기함).세터를 사용하지 않는 이유는 무엇입니까?

글쎄요, 때로는 해당 필드를 비공개로 할 필요가 없습니다(제 영어 실력이 좋지 않다면 죄송합니다).종종 우리는 소프트웨어를 라이브러리처럼 작성하고 불필요한 getter/setter로 필드(비즈니스 로직 필드)를 캡슐화합니다.

다른 경우에는 해당 방법이 실제로 필요합니다.그렇다면 두 가지 가능성이 있습니다.
1.그 안에는 비즈니스 로직이 있습니다.그런 다음 테스트를 받아야 하지만 실제 getter/setter는 아닙니다.나는 항상 다른 수업에서 그 논리를 작성합니다.그리고 테스트는 클래스가 아닌 다른 클래스를 테스트합니다. 포조.
2.없기.그렇다면 가능하면 손으로 쓰지 마세요.예를 들어, 다음 인터페이스에 대한 구현은 완전히 자동 생성될 수 있습니다(런타임에서도!).

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

그러니 손으로 쓴 것만 테스트하세요.게터/세터인지는 상관없습니다.

저는 각 속성에 대한 테스트 케이스를 작성하지 않고 대신 유형을 결정하기 위해 리플렉션/인트로스펙터를 사용하여 단일 테스트 케이스의 모든 setter/getter를 테스트합니다.다음은 이를 보여주는 훌륭한 리소스입니다.

http://www.nearinfinity.com/blogs/scott_leberknight/do_you_unit_test_getters.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top