Upload
beom-kyun-choi
View
5.071
Download
1
Embed Size (px)
DESCRIPTION
테스트에 대한 팀내 발표 자료
Citation preview
Test ?
일상 ???
ㅎㅎㅎ , 구현 끝 .테스트 좀 해 볼까 ?( 난 역시 잘해 ~)
어라 ? 왜 안 되지 ?뭐가 문제일까 ?
이게 문제군 ,어디 한번 다시
앗 , 또 다른문제가… .
또 버그 ,,,시간이…
휴 , 간신히했네 .
어떻게 테스트 하길래 ?
UI 출력
데이터 입력
전송
에러
디버그
수정
테스트 범위
• RIA 코드 ( 자바스크립트 , Flex 등 )• UI 생성 (HTML FORM 등 )• HTTP 요청 분석 ( 파라미터 처리 등 )• 비즈니스 로직 처리• DB 연동 처리
테스트가 가능하려면 ?
• RIA 코드 ( 자바스크립트 , Flex 등 )• UI 생성 (HTML FORM 등 )• HTTP 요청 분석 ( 파라미터 처리 등 )• 비즈니스 로직 처리• DB 연동 처리
모두 다 구현해야 비로서 테스트 완료
복잡도의 증가↓
테스트 시간의 증가
리듬
코딩 테스트 디버그 테스트 디버그 테스트
짧은 리듬을 여러 번 반복하는 게 개발 속도에 유리
코딩 코딩테스트 / 디버그 테스트 / 디버그
짧은 리듬을 유지하려면 ?
테스트 범위가 작아야 함 !
테스트 범위가 작으려면 ?
큰 덩어리 하나
요청 처리
비즈니스 로직
DB 연동
UI 생성
단위 테스트 (Unit Test)
• 전체 기능이 아닌 일부 범위만 테스트– 주로 클래스의 메서드가 단위 테스트의 대상
• 단위 테스트 예 ,– DB 연동 처리 (DAO) 클래스의 select() 메서드
테스트– 회원 가입 Service 클래스의 regist() 메서드 테스트
Controller Service DAO
통합테스트 (Integration Test)단위테스트 (Unit Test)
단위 테스트 프레임워크• 기본 프레임워크
– JUnit (*)– TestNG
• JUnit 테스트 예public class CryptoTest {
@Test public void test() { String source = "madvirus, 최범균 , 전략기술팀 "; String encrypted = Crypto.encrypt(source);
String expectedEnc = "UiDWVjs050cbZpQDOPV….."; assertEquals(expectedEnc, encrypted);
assertFalse(source.equals(encrypted)); System.out.println(encrypted);
String decrypted = Crypto.decrypt(encrypted); assertEquals(source, decrypted); }}
테스트와 의존
Controller Service DAO
이걸 테스트 하려면 ?
테스트와 의존
Controller Service DAO
이걸 테스트 하려면 ?
-DAO 가 구현되어 있지 않으면 Service 를 테스트 할 수 없나 ?-DB 가 없으면 Service 를 테스트 할 수 없나 ?-Service 가 구현되어 있지 않으면 Controller 를 테스트 할 수 없나 ?
인터페이스와 Mock
인터페이스에 대고 개발
public class Service {
private Dao dao;
public int someMethod() { int val = dao.select(); return val + 1; }
public void setDao(Dao dao) { this.dao = dao; }}
public interface Dao {
int select();}
의존 대상을 Mock 으로 대체• Mock 을 이용한 단위 테스트
– 실제 구현 대신 Mock 구현 사용• 예 ,
public class ServiceTest {
@Test public void testSomeMethod() { MockDao dao = new MockDao(); Service service = new Service(); service.setDao(mockDao); int result = service.someMethod();
assertEquals(2, result); }}
public class MockDao implements Dao {
public int select() { return 1; }}
Mock 생성• Mock 을 생성해주는 라이브러리
– Mockito, Spring Test, easyMock, jMock 등• Mock 이용 테스트 샘플
public void setUp() { authenticator = mock(Authenticator.class); // mock 생성 loginController = new LoginController(); loginController.setAuthenticator(authenticator);}
@Testpublic void login() { HttpServletRequest request = new MockHttpServletRequest(); // 웹 요청 Mock Authentication authentication = mock(Authentication.class); when(authenticator.authenticate(Mockito.<AuthenticationRequest> any-Object()))
.thenReturn(authentication); ModelAndView mav = loginController.login(request, "id", "password"); // 테스트 assertEquals(LoginController.DEFAULT_SUCCESS_VIEW_NAME, mav.getView-Name()); verify(authenticator).authenticate(Mockito.<AuthenticationRequest>anyObject());}
내용 정리• 테스트가 용이하도록
– 테스트하기 쉬운 크기로 클래스를 잘게 나눔– 인터페이스에 의존해서 테스트 용이하도록 ,
• Mock 을 이용한 테스트• 덤으로 병행 개발 가능
– 테스트 프레임워크를 사용• JUnit, Mockito, Spring Test
• 짧은 주기로 리듬감 있는 개발 실현 !
앞으로… . 숙제는• 단위 테스트 습득
– JUnit 세미나• 통합 테스트 기법 습득
– Spring 이 제공하는 테스트 기법• DB 테스트 기법 습득
– DbUnit 세미나• 웹 기능 자체의 테스트 자동화
– Selenium 세미나
Q & A