본문 바로가기

Java

[Java] Interface. - 아주 간단한 테스트 프레임웍 만들어보기 3 -

앞선 포스트에서는 Interface를 사용해서 같은 Interface를 구현한 테스터 클래스들을
한번에 실행하여 그 결과를 볼 수 있는 Tester.java 까지 구현하였습니다.


Tester.java
새로운 테스터가 추가되어야 한다면
ProductTester Interface를 구현하여 위 Tester.java 에서 그 클래스를 add해주면 되었습니다.

하지만, 매번 이렇게 테스터가 추가 될 때 마다
클래스를 수정하고, 컴파일해서 배포를 해야 한다면 조금 귀찮은 작업이 될 수도 있습니다.
그리고, 실제로 현장에서 사용되는 테스터 클래스가 한두개가 아닐 수 있는데
그렇게 되면 Tester.java의 클래스는 addTester 메서드로 도배가 될 것 입니다.

그래서 간단하게 프로퍼티를 사용해서 , 테스트 할 테스터 클래스들을 선언하고
이를 이용해서 Tester.java 를 구현해보려고 합니다.

일단 프로퍼티 파일을 만들고 거기다가 테스트 할 테스터 클래스들을 기술합니다.

그리고 이 프로퍼티 파일을 읽어서 해당 테스터 클래스들을 동적으로 생성하고
이를 이용해서 테스트를 수행하는 것이지요..


tester.properties Tester.java
프로퍼티 파일에서 테스터 클래스들을 가져와서 Class.forName 을 통해서 해당 class의 Class instance를 얻고
(관련 글 참조 : http://devyongsik.tistory.com/292) 이를 사용하여 객체를 생성해서 테스트를 수행하는 코드 입니다.
프로퍼티 파일에 대한 stream을 얻는 방법은 위의 두가지 경우처럼 절대경로를 이용하거나, Class의 getResource 메서드를 사용하여 클래스패스에 있는 프로퍼티를 읽어 올 수 있는 방법이 있습니다.
(관련 글 참고 : http://devyongsik.tistory.com/171)

여기서 얘기하고 싶은 것은 저것이 아니기 때문에.. 일단 넘어가고... 아무튼 프로퍼티로 부터 클래스의 full name을 얻어와서
이를 사용해 동적으로 객체를 생성하게 되어 있습니다.
꼭 .properties일 필요는 없고 xml로 만들어서 사용하셔도 되겠죠..

만약에 테스터 클래스가 추가 되어야 한다고 하면 위 상태에서는 소스를 건드릴 것이 아무것도 없습니다

단지, properties 파일에 추가 될 테스터 클래스의 이름을 추가해주기만 하면
알아서 테스트를 실행하게 됩니다.

이정도만 해도 꽤 쓸만 할 것 입니다. (아닐까요..ㅋㅋ)

아직 인터페이스를 사용하는 것이 왜 좋은지 감이 안 오신다면..
위 코드를 인터페이스를 사용하지 않고 한번 구현해보세요.

다음에는 Annotation을 사용해서 만들고자 하는 최종 버전을 작성해 보겠습니다.