Whiteship's Note

Abstract Test

Java : 2006. 11. 28. 20:26


테스트 클래스와 구현 클래스 간의 갯수가 일치 하지 않습니다. 이유는 인터페이스인 MemberDao 클래스에 대한 테스트 클래스를 만들지 않았기 때문입니다.

이 상황을 Abstract Test라는 아티클을 보면서 개선시켜 보겠습니다.

먼저 인터페이스에 대한 추상 테스트 클래스를 작성합니다. 추상 테스트 클래스는 몇가지 특성이 있는데 기본적으로 다음과 같은 코드가 기본 형태 입니다.

일단 여기서 의문이 드는 것으로

1. 생성자에 String 매개변수가 있다는 점.
2. 팩토리 메소드인 createFoo()에서 Exception을 던지고 있는 모습.
3. 메소드 몇개가 final 이라는 점.

이 중에서 위에 두개는 아직 이해가되지 않지만 세번째 final은 오버라이딩으로 인해 sub class의 의도가 오염될 수 있는 것을 방지 하는 것 같습니다. Liskov 원칙과 관련이 있는 것 같습니다.

위를 따라서 MemberDaoTest 클래스를 작성합니다.

이제 이 추상 테스트 클래스를 상속 받아서 추상 메소드를 구현할 클래스를 만들어야 합니다. 이 클래스의 팩토리 메소드에서 특정 구현 클래스의 객체를 리턴해둬야 할 것 같습니다. 역시 이 클래스에 대한 탬플릿도 있습니다.

위 클래스를 따라서 구상 클래스를 작성합니다.

이렇게 따라 할 수 있었습니다.

간단하게 Abstract Test를 만드는 순서를 정리하자면

1. 모든 인터페이스(or 추상 클래스)에 대한 추상 테스트 클래스를 작성하라.
2. 인터페이스에 대해서 구체적인 테스트들을 작성하라.(final 메소드들을 가리키는 듯)
3. 추상 테스트 클래스를 구현한 테스트를 작성하여 테스트 하라.

하지만 아직까지 의문점 1, 2는 풀리지 않네요. 차근 차근 봐야겠습니다.

에피소드

'Java' 카테고리의 다른 글

JUnit Reloaded  (0) 2006.12.07
I/O Stream 구성  (0) 2006.12.07
Checked Exception VS Unchecked Exception  (0) 2006.12.01
냄새 나는 Switch 코드와 다형성  (3) 2006.11.30
Map 인터페이스 살펴보기  (0) 2006.11.29
Abstract Test  (6) 2006.11.28
상속을 이용한 다형성 vs 인터페이스를 이용한 다형성  (0) 2006.11.24
Throwable 계층구조  (0) 2006.11.21
상속에 대하여...  (6) 2006.11.20
assertEquals()는 같은 Type을 비교하라.  (2) 2006.11.18
Java에서 실수 표현 부정확성  (19) 2006.11.15
top

  1. zerry82 2006.12.07 19:26 PERM. MOD/DEL REPLY

    리스코프 교체 원칙
    (Liskov Substitution Principle - LSP)
    서브타입은 언제나 자신이 기반타입 (base type)으로 교체할 수 있어야 한다. 유도된 클래스의 메소드를 퇴화시키거나 불법으로 만드는 일을 피하라. 기반 클래스의 사용자는 그 기반 클래스에서 유도된 클래스에 대해 아무것도 알 필요가 없어야 한다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.12.07 22:03 신고 PERM MOD/DEL

    쌩큐~ 단어들을 참 어렵게 써놨네;;
    기반 클래스 = Base 클래스 = 상위 클래스
    유도된 클래스 = 하위 클래스
    메소드 퇴화나 불법으로 만듬 = 원래 의도와 어긋남

  2. Favicon of https://zerry82.tistory.com BlogIcon 동자~ 2006.12.12 17:21 신고 PERM. MOD/DEL REPLY

    그.. 에자자바 공부하다가 -_-;; 추상 클래스에 대한 추상 테스트 클래스를 만들었는데요

    그런데 문제는 추상 테스트 클래스이기 때문에 구체화 시킬수 없잔아요?

    그래서 이 추상 테스트 클래스 만으로는 테스트를 할 수 가 없던데.

    그런데 이것을 테스트 하려면??

    테스트 용으로 억지로 아무 클래스나 상속 받게 한다음에 그것을 가지고 테스트를

    대체 해야 하나요??

    저번 스터디때 언급이 되었던 내용인데.. 어케 해야하는지 가물 가물 하네요 .. 아 게으른 인생~~

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.12 17:30 PERM MOD/DEL

    천천히 봐봐..

    테스트용으로 억지로 만든것이 아니야.
    테스트 코드들과 실제 소스 코드들과 1:1 매칭이 된 것 뿐이지.

    추상 테스트 클래스는 추상 클래스에 매칭 되고
    구상 테스트 클래스는 구상 클래스에 매칭 되는거지..

    추상 클래스는 객체로 만들어서 쓸수가 없으니까 추상 테스트 클래스 역시 객체로 만들어서 테스트가 돌아가게 할 필요가 전혀 없는거지...

    다만 이 추상 클래스들을 구현한 클래스들은 돌아가야겠지..

  3. Favicon of https://zerry82.tistory.com BlogIcon 동자~ 2006.12.12 18:46 신고 PERM. MOD/DEL REPLY

    그렇군요!! 후훗.. 제가 오해하고 있었습니다

    트랙백 날립니다!!

    Favicon of http://whiteship.tistory.com/ BlogIcon 기선 2006.12.12 20:08 PERM MOD/DEL

    고맙게 받을께ㅋㅋ

Write a comment.




: 1 : ··· : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : ··· : 140 :