Test ?<br />
일상???<br />ㅎㅎㅎ, 구현 끝.<br />테스트 좀 해 볼까?<br />(난 역시 잘해~)<br />앗, 또 다른<br />문제가….<br />또 버그 ,,,<br />시간이…<br />어라? 왜 안 되지?<br...
어떻게 테스트 하길래?<br />
테스트범위<br /><ul><li> RIA 코드 (자바스크립트, Flex 등)
UI 생성 (HTML FORM 등)
HTTP 요청 분석 (파라미터 처리 등)
비즈니스 로직 처리
DB 연동 처리</li></li></ul><li>테스트가 가능하려면?<br /><ul><li> RIA 코드 (자바스크립트, Flex 등)
UI 생성 (HTML FORM 등)
HTTP 요청 분석 (파라미터 처리 등)
비즈니스 로직 처리
DB 연동 처리</li></ul>모두 다 구현해야 <br />비로서 테스트 완료<br />
복잡도의 증가<br />↓<br />테스트 시간의 증가<br />
리듬<br />코딩<br />테스트<br />테스트<br />디버그<br />테스트<br />디버그<br />짧은 리듬을 <br />여러 번 반복하는 게 <br />개발 속도에 유리<br />코딩<br />코딩<br /...
짧은 리듬을 유지하려면?<br />테스트 범위가 작아야 함!<br />
테스트 범위가 작으려면?<br />큰 덩어리 하나<br />요청 처리<br />비즈니스 로직<br />DB 연동<br />UI 생성<br />
단위 테스트 (Unit Test)<br />전체 기능이 아닌 일부 범위만 테스트<br />주로 클래스의 메서드가단위 테스트의 대상<br />단위 테스트 예,<br />DB 연동 처리(DAO) 클래스의 select() 메...
단위 테스트 프레임워크<br />기본 프레임워크<br />JUnit (*)<br />TestNG<br />JUnit테스트 예<br />public class CryptoTest {<br />    @Test<br /> ...
테스트와 의존<br />이걸 테스트 하려면?<br />Controller<br />Service<br />DAO<br />
테스트와 의존<br />이걸 테스트 하려면?<br />Controller<br />Service<br />DAO<br /><ul><li>DAO 가 구현되어 있지 않으면 Service를 테스트 할 수 없나?
Upcoming SlideShare
Loading in …5
×

TEST?

5,654 views

Published on

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

Published in: Technology

TEST?

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

×