2.4 스프링 테스트 적용.

Slides:



Advertisements
Similar presentations
신도초 5 학년 4 반 김정수 지도교사 전혜원 선생님.  산출물 주제를 정하다가 문득 낮보다 왜 밤이 더 소리가 잘 들리는지 궁금해서 결정했다. 처음에 는 물질의 종류에 따른 소리의 크기로 하려 그랬 지만 실험이 너무 간단한 것 같아서 재료를 늘리 거나 온도를 높이려고.
Advertisements

매쓰홀릭 – 설명회. 매쓰홀릭 설립 배경 : 강사 지향, 관리 지향, DB & History 에 기반한 교육실현 온라인 및 e-book 교육의 실현을 목표 연혁 2008 년 5 월 매쓰홀릭 고등부 사업 출범 DB 구축 및 시스템 기획 2009 년 5 월 매쓰홀릭 온라인.
©2004 by South-Western/Thomson Learning 1 베이커리소비자 개인소비가치에 따른 유기농제품의 소비태도가 구매 후 만족도에 미치는 영향 이 윤 희이 윤 희 지도교수 : 진양호 교수님.
작품을 통해 살펴본 전통사회와 현대사회의 갈등 인문학부 손명학 공학계열 김능배 사회체육 김영수 현대사회와 사회학.
D 사 결산서 검토 SK 증권. 1 결산서 검토 구 분검 토 내 용 (’11 년도 기준 ) 외부감사 대상 해당 여부 현황 : 2011 년 말 기준 동사의 자산총액은 94 억원으로 외부감사 대상에 해당되지 아니함 제언 : 2012 년 중 해외법인 취득으로.
폭력. 폭력이란 무엇인가 우상의 눈물 물리적인 폭력 ( 최기표 ) VS 지능적인 폭력 ( 임형우, 담임선생님 )
의료자원 규제현황과 개선방향 자원평가실. 의료자원 관리 개요 규제개혁 토론과제.
2 Ⅰ Ⅱ Ⅲ 3 Ⅰ 4 1. 추진배경 2. 사업의 정의 3. 사업의 범위 4. 개선방향.
1 박 2 일 !!! 인천마장초등학교 유수아. 1 박 2 일 멤버 인기순 위 1 위 이승기 2 위 엄태웅 3 위 은지원 4 위 김종민, 이수근 ※인터넷에서 본것이기 때문에 사람에따라 서 다를 수 있다. ※
연령별 재테크 방법.
직장내 성희롱, 성폭력, 성매매 예방연수.
Bizbill 무료전자세금계산서 사용자 메뉴얼.
다초점렌즈의 oh 설계
정보 사회의 역기 능과 대처 01 인터넷 중독, 어떻게 예방할까
석관중앙교회 5남전도회 석 관 중 앙 교 회 회원 소식 통권 05-04호 발행일 : 2005년 04월 회 장 : 장진호 집사
한국경제교육협회 일반인 표준 경제 개념 9. 인플레이션과 실업
연 합 남 전 도 회 월 례 회 1부 예배- 찬 송 장 다같이 2011년 1월 2일 1부 예배- 찬 송 장 다같이 기 도
지역사회복지론 1조. 요양보호시설에 대해서 황성국 임재형 이동영
- 예∙결산 및 기본재산 운영 신뢰도 제고를 위한 실태점검, 결산지원사업 -
사 업 계 획 2011년 제1호 - 2월 1일 2011 주 안에서 소통하며 화합하고 참여하며 헌신하는 남신도회
좋은 강의 국제관계학과 정연식.
학교교육제도 이해하기 천안청룡초등학교 교사 임 병 현.
2014학년도 중학교 교육과정 편성시 유의사항 울산광역시교육청 교육과정운영과 한 상 철.
14주차 1교시 강화계획 [학습목표] 1. 강화계획의 정의를 안다 [학습내용] 1. 단순한 강화계획 2. 간헐적 강화 3. 복합 계획 4. 선택과 대응법칙 [사전학습] 강화계획이 일어날 수 있는 사례를 생각해본다.
협동조합에 대한 이해 및 활성화 과제 정금성(정읍N사람 대표) 지역활성화연구소장.
연장근로와 야간·휴일근로 김영호 노무사 나눔 노사관계연구소 소장 연세대 일반대학원 박사 수료 고려사이버대 법학과 외래교수
I 문학의 개념과 역할 1. 문학의 개념 (1) 언어 예술로서의 문학 (2) 소통 활동으로서의 문학
Premier Test 초급 이름 : • 속진 레이아웃(버전3)
고급 컴퓨터 프로그래밍 팀명:지식인 팀원:홍광수 원대연 이소정.
4. 목적론적 윤리와 의무론적 윤리 01. 경험주의와 이성주의 01. 경험주의와 이성주의 02. 결과론적 윤리와 공리주의
JPetStore 분석자료 1.0 Spring framework 작성자 : 김태완.
Test-Driven Development
IOC, DI 2015 Web Service Computing.
21강. 스프링JDBC JDBC를 이용한 반복코드 줄이기 Spring빈을 이용한 코드 간소화
공공데이터 개방 정책 및 주요 추진 방향 ‘ 행정자치부 공공정보정책과.
Open API - Naver (Application Programming Interface )
개항기 조선과 동아시아 박 범 한국역사입문Ⅱ.
웹 다이어리 완료보고서 이상제 정영석.
물류단지 총량제 폐지 이후 물류시설 공급정책 방향 국 토 교 통 부.
나의 삶과 금융경제 설계전략 당신의 인생은 안녕하십니까 Team . 승승장구.
SpringFramework 중간고사 요약 REST by SpringFramework.
Office 365 서비스 사용 안내 정보지원센터/ 두원공과대학교.
Sep Youn-Hee Han Chapter 04. 예외 Sep Youn-Hee Han
예산안 원가 구분 금액 총 제작비 대비 원가세부항목 기획개발비 270,000, % 기획비 120,000,000
인생이모작을 위한 지자체의 지원 방안 : 울산 북구청 사례 울산북구인생이모작이음센터
정품 라이센스.
대구의 부도심 대구의 주요축 동대구 부도심 4조 강민석 / 박성균 / 최은지/ 황재현/김예지.
환경관리 규정 - 목 차 – 1.적 용 범 위 9.환경관리 교육 2.목 적 10.환경 점검
기업회생 절차.
2. 윤리학의 원리와 적용 가. 상대주의와 절대주의.
5.2 트랜잭션 서비스 추상화.
제안 목적 고객성향 분석으로 매출 증대 유사업체 분석으로 신상품 홍보 원가요소 분석 및 피드백으로 원가율 관리
Ⅲ. 세계의 자연환경 -열대기후와 주민생활.
청각기관의 구조와 기능2 옥정달.
1. 복리후생비 복리후생비란? ✔ 법인이 임원 또는 사용인(파견근로자 포함)을 위하여 지출한 비용
강의 프레젠테이션 현대 사회와 미디어 12강. 미디어 문화.
기술 진화와 진보.
사도행전 13장 22절 말씀 –아멘 다 윗 을 왕 으 로 세 우 시 고 증 언 하 여 이 르 시 되 내 가 이 새 의 아 들
연구 수업 발표 자료 학습스타일과 자기주도학습 큰 사 람 연 구 소.
장애부위검사 객관적인 청력검사.
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
경찰행정과 세미나 결과를 공개해야한다. VS 비공개로 해야한다. 경찰의 근무성적평정 제도.
에듀팟-자기소개서작성.
5.4 메일 서비스의 추상화.
Can Automatic Calculating Machines Be Said To Think?’
간식의 세계!!.
영상으로 읽는 한국사 02 삼국은 서로를 한 ‘민족’으로 생각했나? - 삼국통일의 의미-.
삶을 풍요롭게 만드는 의사소통.
시민으로서의 권리와 의무 사회(일반사회) 중학교 2학년 2학기 Ⅶ. 사회생활과 법규범
Presentation transcript:

2.4 스프링 테스트 적용

2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리 현재까지의 문제점 스프링 테스트 컨텍스트 프레임워크 적용 애플리케이션 컨텍스트 생성의 중복 @Before 메소드는 @Test 메소드 개수 만큼 수행되기 때문에 애플리케이션 컨텍스트 생성도 그만큼 수행됨 추후 빈이 많아지면 애플리케이션 컨텍스트 생성 수행시간도 길어짐 스프링 테스트 컨텍스트 프레임워크 적용 @RunWith와 @ContextConfiguration 애노테이션 적용

2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리 테스트 메소드의 컨텍스트 공유 @Before setUp() 메소드 추가 실행시 콘솔 출력결과 context (애플리케이션 컨텍스트) 객체는 모두 동일 UserDaoTest 객체는 매번 다름 @Test 메소드를 실행할 때마다 테스트 객체를 새로 생성

2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리 테스트 클래스간의 컨텍스트 공유 여러 개의 테스트 클래스가 모두 같은 설정파일을 지닌 애플리케이션 컨텍스트를 사용한다면, 단지 한 개의 애플리케이션 컨텍스트 객체를 생성하고 여러 클래스가 공유한다.

2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리 @Autowired UserDao 빈의 자동 와이어링 처리 별도의 DI 설정 없이 자동 와이어링 UserDao 빈의 자동 와이어링 처리

2.4.1 테스트를 위한 애플리케이션 컨텍스트 관리 @Autowired XML에 dataSource 이름으로 등록한 SimpleDriverDataSource 타입 빈을 DI 받기 위한 코드 타입 이름을 인터페이스 이름인 DataSource 로 선언해도 됨 DI 받을 때 타입 선언: 인터페이스 이름 vs. 구체적인 클래스 이름? DataSource에 선언된 일반적인 메소드 호출에만 관심이 있다면 인터페이스 이름으로 선언 추천 dataSource 빈의 구현 클래스가 변경되어도 DI 문제 없음 가능하면 인터페이스 선언 사용 추천 구체적인 클래스가 지니고 있는 특정 메소드 호출에 관심이 있다면 클래스 이름으로 선언

2.4.2 DI와 테스트 인터페이스를 사이에 두고 DI를 사용하는 이유 인터페이스 타입인 UserDao 변수로 DI 받는 이유 (왜 구체적인 SimpleDriverDataSource를 타입으로 선언하지 않았나?) 1) 소프트웨어 개발시에 구체적인 클래스가 변경되어도 코드 수정이 없다. 다른 부가기능 및 새로운 서비스 기능 도입시에 새로운 클래스로 구현될 가능성이 높음 이런 경우 새로운 클래스 작성 후 xml만 수정하면 됨 3) JUnit 테스트에서는 DI를 적극적으로 활용한다. 다음 페이지 참고

2.4.2 DI와 테스트 테스트 코드에 의한 DI 실제 운영 DB에 연결을 하는 dataSource는 테스트시에 사용하면 절대 안됨 즉, 테스트 시에는 다른 곳에서 운영되는 DB (예, 로컬 DB)로 연결하는 dataSource 객체를 DAO가 사용하도록 해야 함 SingleConnectionDataSource 테스트 때 많이 사용하는 빠른 연결을 보장하는 DataSource

2.4.2 DI와 테스트 테스트 코드에 의한 DI @DirtiesContext 애노테이션 스프링의 테스트 프레임워크에게 해당 클래스 (또는 메소드)의 테스트에서 현재 사용중인 애플리케이션 컨텍스트를 공유하지 않게 함 본 테스트가 끝나고 다른 테스트가 시작되면 원래의 애플리케이션 컨텍스트가 다시 생성되어 활용됨 즉, 테스트 중에 변경되어질 수 있는 상황이 다른 테스트에 영향을 주지 않도록 보장해줌 하지만, @DirtiesContext 애노테이션은 많이 사용되지 않음 다음 페이지 참조

2.4.2 DI와 테스트 테스트를 위한 별도의 DI 설정 테스트 전용의 애플리케이션 컨텍스트 설정 파일 생성 test-applicationContext.xml 테스트시에 테스트용 설정 파일 적용

2.4.2 DI와 테스트 컨테이너 없는 DI 테스트 스프링의 비침투적 (Noninvasive) 특성 사용 스프링의 애플리케이션 컨테이너에 전혀 의존적이지 않은 테스트 @RunWith와 @ContextConfiguration애노테이션 사용하지 않음 @Autowired 애노테이션 사용하지 않음

2.4.2 DI와 테스트 컨테이너 없는 DI 테스트 장점 전체적으로 애플리케이션 컨텍스트를 전혀 활용하지 않는다면 테스트 수행속도 높아짐 코드가 스프링에 의존하지 않으므로 더욱 깔끔함

2.4.2 DI와 테스트 DI를 이용한 테스트 방법 선택 스프링 컨테이너 없이 테스트할 수 있는 방법을 우선적으로 고려 스프링 컨테이너에 의존하는 테스트를 해야 할 때 여러 객체들이 복잡한 의존관계를 지니고 있는 경우 이런 경우 스프링의 설정을 이용한 DI 방식의 테스트가 유리 테스트에만 임시적으로 예외적인 의존관계가 필요한 경우 @DirtieContext 애노테이션 사용 하지만, 테스트를 위한 별도의 XML 설정 파일 사용 추천

2.5 학습 테스트로 배우는 스프링

2.5.0 학습 테스트란? 학습 테스트 (Learning Test) 학습 테스트의 목적 자신이 만들지 않은 프레임워크나 다른 개발팀에서 만들어서 제공한 라이브러리 등에 대한 테스트 학습 테스트의 목적 자신이 사용할 API나 프레임워크의 기능을 “테스트”하면서 그 사용방법을 익히려는 것 때로는 어설프게 알고 있거나 오해라고 있는 지식을 “테스트”를 만드는 과정을 통해 바로잡기 위함

2.5.1 학습 테스트의 장점 학습 테스트의 장점 스프링 학습 테스트 다양한 조건에 따른 기능을 손쉽게 확인 가능 예제를 통한 학습보다 더 다양한 조건에 따라 어떻게 기능이 다르게 동작하는지 확인 가능 학습 테스트 코드를 개발 중에 참고 가능 학습 테스트 작성 이후 샘플 코드로서 참고 가능 프레임워크 제품을 업그레이드할 때 호환성 검증을 도와줌 기존에 사용하던 API나 기능에 변화가 있거나 업데이트된 제품에 버그가 있다면 학습 테스트를 통해 미리 확인 가능 테스트 작성에 대한 좋은 훈련이 됨 스프링 학습 테스트 스프링 학습 테스트 작성시 참고할 수 있는 가장 좋은 소스 스프링 자신에 대한 테스트 코드

2.5.2 학습 테스트 예제 JUnit 테스트 객체 테스트 JUnit 테스트 메소드 수행시 새로운 객체 생성 테스트

2.5.2 학습 테스트 예제 JUnit 테스트 객체 테스트 JUnit 테스트 메소드 수행시 새로운 객체 생성 테스트 (개선)

2.5.2 학습 테스트 예제 스프링 테스트 컨텍스트 테스트 애플리케이션 컨텍스트 의 여러 메소드에서의 공유 테스트 애플리케이션 컨텍스트 의 여러 메소드에서의 공유 테스트 등록된 빈이 없는 설정 파일 마련 테스트 코드 (1/2)

2.5.2 학습 테스트 예제 스프링 테스트 컨텍스트 테스트 애플리케이션 컨텍스트 의 여러 메소드에서의 공유 테스트 애플리케이션 컨텍스트 의 여러 메소드에서의 공유 테스트 테스트 코드 (2/2) 세가지의 검증방법

2.5.3 버그 테스트 버그 테스트 (bug test) 코드에 오류가 있을 때 그 오류를 가장 잘 드러낼 수 있는 테스트 버그가 원인이 되어 테스트가 실패하는 코드를 우선 작성 그 다음 테스트가 성공할 수 있도록 애플리케이션 코드 수정

[실습] 다음을 검증 할 수 있는 학습 테스트 작성 1) userDao 스프링 빈은 싱글톤 방식으로 객체가 생성됨을 검증 2) @Autowired로 DI 받은 userDao 객체가 애플리케이션 컨텍스트에서 직접 getBean()으로 가져온 객체와 동일한지 검증