public interface XYZService {
public void insert(XYZ domain) throws Exception;
......
}
public class XYZServiceImpl implements XYZService {
public void insert(XYZ domain) throws Exception{
//이렇쿵 저렇쿵
.....
}
}
public class XYZServiceImplTest {
@Autowired
public XYZService xyzService ;
@Test
public void testInsert1(){ //-------------------------1
XYZ domain = ......
xyzService.insert(domain);
}
}
XYZServiceImpl 를 구현하기 위해서 XYZServiceImplTest 를 만들고
XYZServiceImpl 수정 -> XYZServiceImplTest 실행 -> ... 이라는 과정을 반복하여
개발을 합니다.
위의 1은 XYZServiceImplTest 는 "만들어진 XYZServiceImpl 를 테스트하는" 모양새인거 같습니다만,
XYZServiceImplTest 가 "XYZServiceImpl 를 만들기 위한 테스트" 가 되려면
다음과 같야야 하지 않을까 생각이 들기도 합니다.
@Test
public void testInsert2(){ //-------------------------2
XYZ domain = ......
//이렇쿵 저렇쿵
}
크게 중요한 이슈인지는 모르겠으나,
테스트가 "정의된 클래스가 잘 동작하는지"를 확인하는 것인지,
아니면 "구현 방안의 선행 확인" 인지 ,
실제 배포되는 테스트 소스는 어느쪽에 더 중점을 두어야 하는 걸까요?
여러분들의 고견을 듣고 싶습니다.
public interface XYZService {
public void insert(XYZ domain) throws Exception;
......
}
public class XYZServiceImpl implements XYZService {
public void insert(XYZ domain) throws Exception{
//이렇쿵 저렇쿵
.....
}
}
public class XYZServiceImplTest {
@Autowired
public XYZService xyzService ;
@Test
public void testInsert1(){ //-------------------------1
XYZ domain = ......
xyzService.insert(domain);
}
}
XYZServiceImpl 를 구현하기 위해서 XYZServiceImplTest 를 만들고
XYZServiceImpl 수정 -> XYZServiceImplTest 실행 -> ... 이라는 과정을 반복하여
개발을 합니다.
위의 1은 XYZServiceImplTest 는 "만들어진 XYZServiceImpl 를 테스트하는" 모양새인거 같습니다만,
XYZServiceImplTest 가 "XYZServiceImpl 를 만들기 위한 테스트" 가 되려면
다음과 같야야 하지 않을까 생각이 들기도 합니다.
@Test
public void testInsert2(){ //-------------------------2
XYZ domain = ......
//이렇쿵 저렇쿵
}
크게 중요한 이슈인지는 모르겠으나,
테스트가 "정의된 클래스가 잘 동작하는지"를 확인하는 것인지,
아니면 "구현 방안의 선행 확인" 인지 ,
실제 배포되는 테스트 소스는 어느쪽에 더 중점을 두어야 하는 걸까요?
--
===========================================================
안녕하세요! 양완수 입니다.
+HP : 010 2008 4167
+Email : ywsa...@gmail.com , yang...@daumsoft.com
+
===========================================================
PS ....그런데 저는 TDD 과정 자체가 마치 저에게는 수학 문제를 풀기 위해 좌변 우변에 살을 붙혀가면 소거해가며 심플한 공식으로 유도해가는 과정처럼 느껴지더군요...
제질문이 extra method 테스트에 관련된 것처럼 흘렀지만
영회님의 글중에 다음 부분에서 잘 요약 된것 같습니다.
"테스트를 먼저 하는 TDD의 절차(Test First)"를 중요하게 생각하는지
아니면 테스트 자체 혹은 테스트를 통해 클래스 정상 작동을 검증하는 면을 중요하게 생각하는지"
TDD 순수(?)주의에 의거하여 개발 한다면 다음과 같은 프로세스를 가지게 되지 않나요?
구현 테스트 (//이렇쿵) ->
구현 테스트(//저렇쿵) -> ..... ->
서비스 구현체 완성(XYZServiceImpl)
클래스 정상 작동을 검증하는 면을 중점에 두고 개발 한다면
XYZServiceImplTest 작성 ->
서비스 구현체 수정(//이렇쿵) ->
동작 테스트 ->
서비스 구현체 수정(//이렇쿵) ->
동작 테스트 ->....... ->
서비스 구현체 완성(XYZServiceImpl)
물론 두 과정을 모두 진행하는 프로젝트도 있을것 같고
과연 TDD 를 실전 프로젝트에서는 어떻게 적용하며 그 과정은 어떠한가가 궁금합니다.