2008-09-20 6 views
7

인터페이스의 동작을 자동으로 테스트 할 수있는 것이 있습니까 (특히 Java의 경우)? 예를 들어 Comparable 인터페이스에 대한 테스트를 많이하고 있다고 가정 해 봅시다.이 테스트는 Comparable을 구현하는 모든 것에 적용해야합니다. 필자가 원하는 것은 Comparable을 구현하는 클래스의 테스트 픽스처에 "ComparableTests"를 자동으로 포함시킬 수 있다는 것입니다. 이것이 보편적 인 인터페이스와 함께 작동하면 보너스 포인트.Java에서 인터페이스를 구현하는 모든 클래스 테스트

.NET 프레임 워크 mbUnit에는 비슷한 것이 있습니다. TestNG의 생성기 함수와 같은 것을 사용하는 경우 Comparable에 대한 테스트 픽스처를 설정하고 생성기에서 Comparable을 구현하는 각 클래스의 인스턴스를 만들 수 있습니다. . 하지만 차라리 자동으로 사용하고 클래스의 각 부분에 대한 테스트 픽스처에 배치해야합니다 (클래스의 다른 부분을 테스트하기 위해 이미 사용하고 있기 때문에).

명확함 : 나는 이런 식으로 만들 수 있습니다. 이미이 기능을 활성화 한 것이 있다면 묻고있었습니다.

답변

0

.NET에서는 어셈블리를 살펴보고 각 클래스의 상속/구현 계층을 식별하는 메서드를 설정하는 것이 매우 간단합니다. 만약 당신이 Java reflection API을 연구한다면, 자바로도 할 수있을 것이라고 확신합니다.

그러면 ITargetInterface의 배열을 만들고 각각에 대해 테스트 메서드를 호출 할 수 있습니다.

0

한 가지 방법은 jar 파일을 통해 모든 .class 파일을 검색하거나 클래스 디렉토리를 통해 검색하는 것입니다. Class.forName() 메소드를 사용하여 클래스 파일을로드하고 MyInterface.class.isAssignableFrom (내 수업).

이렇게하면 public 내부 정적 클래스 (클래스 파일 이름을 구문 분석 할 수 있음)를 쉽게 처리 할 수는 없지만 개인 내부 클래스 또는 익명 내부 클래스에서는 결코 작동하지 않습니다.

+0

을보십시오. – p3t0r

1

마지막 단락을 바탕으로, 이미 특정 클래스를 테스트 중이므로 단위 테스트에 '추가 방법'을 주입하는 것이 좋습니다. 클래스의 계층 구조를 기반으로 테스트를 첨부 할 수있는 테스트 장치에 대해서는 잘 모릅니다.

그러나 비슷한 것을 구축하기 위해 TestNG를 사용 하자는 제안을 통해 나는 매우 가까이에 있다고 생각합니다. 클래스를 '기본 테스트 클래스'목록에 추가하는 기본 코드를 통합하여 특정 인터페이스를 구현하는 경우 테스트 할 수 있습니다.

자바 유형 시스템이 단방향이기 때문에 일반적인 경우에 대해 생각할 수 있습니다. 클래스가 구현하는 인터페이스를 찾을 수는 있지만 다른 방법은 찾을 수 없습니다. 또한, 문제는 '어디에서 멈추는 지'입니다. 모든 comparable 구현자를 검사하는 테스트가있는 경우 Java 환경에 있기 때문에 String의 유효성을 확인 하시겠습니까?

관련 문제