Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TEST?

6,409 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 />

×