TEST?

20
Test ?

description

테스트에 대한 팀내 발표 자료

Transcript of TEST?

Page 1: TEST?

Test ?

Page 2: TEST?

일상 ???

ㅎㅎㅎ , 구현 끝 .테스트 좀 해 볼까 ?( 난 역시 잘해 ~)

어라 ? 왜 안 되지 ?뭐가 문제일까 ?

이게 문제군 ,어디 한번 다시

앗 , 또 다른문제가… .

또 버그 ,,,시간이…

휴 , 간신히했네 .

Page 3: TEST?

어떻게 테스트 하길래 ?

UI 출력

데이터 입력

전송

에러

디버그

수정

Page 4: TEST?

테스트 범위

• RIA 코드 ( 자바스크립트 , Flex 등 )• UI 생성 (HTML FORM 등 )• HTTP 요청 분석 ( 파라미터 처리 등 )• 비즈니스 로직 처리• DB 연동 처리

Page 5: TEST?

테스트가 가능하려면 ?

• RIA 코드 ( 자바스크립트 , Flex 등 )• UI 생성 (HTML FORM 등 )• HTTP 요청 분석 ( 파라미터 처리 등 )• 비즈니스 로직 처리• DB 연동 처리

모두 다 구현해야 비로서 테스트 완료

Page 6: TEST?

복잡도의 증가↓

테스트 시간의 증가

Page 7: TEST?

리듬

코딩 테스트 디버그 테스트 디버그 테스트

짧은 리듬을 여러 번 반복하는 게 개발 속도에 유리

코딩 코딩테스트 / 디버그 테스트 / 디버그

Page 8: TEST?

짧은 리듬을 유지하려면 ?

테스트 범위가 작아야 함 !

Page 9: TEST?

테스트 범위가 작으려면 ?

큰 덩어리 하나

요청 처리

비즈니스 로직

DB 연동

UI 생성

Page 10: TEST?

단위 테스트 (Unit Test)

• 전체 기능이 아닌 일부 범위만 테스트– 주로 클래스의 메서드가 단위 테스트의 대상

• 단위 테스트 예 ,– DB 연동 처리 (DAO) 클래스의 select() 메서드

테스트– 회원 가입 Service 클래스의 regist() 메서드 테스트

Controller Service DAO

통합테스트 (Integration Test)단위테스트 (Unit Test)

Page 11: 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); }}

Page 12: TEST?

테스트와 의존

Controller Service DAO

이걸 테스트 하려면 ?

Page 13: TEST?

테스트와 의존

Controller Service DAO

이걸 테스트 하려면 ?

-DAO 가 구현되어 있지 않으면 Service 를 테스트 할 수 없나 ?-DB 가 없으면 Service 를 테스트 할 수 없나 ?-Service 가 구현되어 있지 않으면 Controller 를 테스트 할 수 없나 ?

Page 14: TEST?

인터페이스와 Mock

Page 15: TEST?

인터페이스에 대고 개발

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();}

Page 16: TEST?

의존 대상을 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; }}

Page 17: TEST?

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());}

Page 18: TEST?

내용 정리• 테스트가 용이하도록

– 테스트하기 쉬운 크기로 클래스를 잘게 나눔– 인터페이스에 의존해서 테스트 용이하도록 ,

• Mock 을 이용한 테스트• 덤으로 병행 개발 가능

– 테스트 프레임워크를 사용• JUnit, Mockito, Spring Test

• 짧은 주기로 리듬감 있는 개발 실현 !

Page 19: TEST?

앞으로… . 숙제는• 단위 테스트 습득

– JUnit 세미나• 통합 테스트 기법 습득

– Spring 이 제공하는 테스트 기법• DB 테스트 기법 습득

– DbUnit 세미나• 웹 기능 자체의 테스트 자동화

– Selenium 세미나

Page 20: TEST?

Q & A