Test ?
일상???ㅎㅎㅎ, 구현 끝.테스트 좀 해 볼까?(난 역시 잘해~)앗, 또 다른문제가….또 버그 ,,,시간이…어라? 왜 안 되지?뭐가 문제일까?이게 문제군,어디 한번 다시휴, 간신히했네.
어떻게 테스트 하길래?
테스트범위 RIA 코드 (자바스크립트, Flex 등)
UI 생성 (HTML FORM 등)
HTTP 요청 분석 (파라미터 처리 등)
비즈니스 로직 처리
DB 연동 처리테스트가 가능하려면? RIA 코드 (자바스크립트, Flex 등)
UI 생성 (HTML FORM 등)
HTTP 요청 분석 (파라미터 처리 등)
비즈니스 로직 처리
DB 연동 처리모두 다 구현해야 비로서 테스트 완료
복잡도의 증가↓테스트 시간의 증가
리듬코딩테스트테스트디버그테스트디버그짧은 리듬을 여러 번 반복하는 게 개발 속도에 유리코딩코딩테스트/디버그테스트/디버그
짧은 리듬을 유지하려면?테스트 범위가 작아야 함!
테스트 범위가 작으려면?큰 덩어리 하나요청 처리비즈니스 로직DB 연동UI 생성
단위 테스트 (Unit Test)전체 기능이 아닌 일부 범위만 테스트주로 클래스의 메서드가단위 테스트의 대상단위 테스트 예,DB 연동 처리(DAO) 클래스의 select() 메서드 테스트회원 가입 Service 클래스의 regist() 메서드 테스트ControllerServiceDAO통합테스트 (Integration Test)단위테스트 (Unit Test)
단위 테스트 프레임워크기본 프레임워크JUnit (*)TestNGJUnit테스트 예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);    }}
테스트와 의존이걸 테스트 하려면?ControllerServiceDAO
테스트와 의존이걸 테스트 하려면?ControllerServiceDAODAO 가 구현되어 있지 않으면 Service를 테스트 할 수 없나?

TEST?

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