SlideShare una empresa de Scribd logo
1 de 28
오버라이딩을 사용한
테스트 시의 설정 처리
임도형
dh-rim@hanmail.net
@dhrim00
발표자 소개
 Java 개발자
 서버 개발자
 개발 문화
 삽질 증오
중요한 테스트 케이스
 삽질 회피의 핵심 스킬.
 엄청 중요 : 작업된 결과가 새로운 버그
가 되지 않기 위해선
 모든 테스트 케이스는 항상 성공하여
야 한다.
쉽지 않은 테스트 케이스
 작성하기도 쉽지 않고
 깨지지 않게 지키기 쉽지 않다. 정말 어
렵다. 쌈도 많이 난다.
왜 깨질까?
 작성 때하고 지금하고 달라져서
◦ 설치 폴더 구성이…
◦ DB의 상황이…
◦ 설정 파일이…
누구의 책임?
 뭔가 수정했다. 그랫더니 저어쪽 테스
트 케이스가 실패한다.
 ‘모든 테스트 케이스는 항상 성공해야
한다’
설정 파일의 난립
 보통, 특정 테스트를 위해 특정 설정만
변경해 줄 필요가 있다.
 설정 파일을 카피하고, 해당 부분만 수
정한다.
카피와 수정
표준을 수정하면
다 깨진다
전부 찾아가서 수정해 줘야 한
다
보통, 안한다.
 아주 귀찮다.
 경우에 따라선 어렵다.
 그냥 깨지게 놔둔다.
 혹은 @Ignore 처리해 버린다.
설정 오버라이딩?
 테스트를 위해 수정한 부분만 가지고
있자.
 그리고 그 부분만 오버라이딩 하자.
다른 부분만 설정
표준만 수정 해도 오케바리
Waple 프로젝트
 ApiStore의 엔진 서버
 Maven을 사용
 표준 폴더 구조
◦ src/main/java
◦ src/test/java
◦ src/main/resources
◦ src/test/resources
4가지 설정 파일
 log4j_config.xml
 hibernate_config.xml
 spring-context.xml
 waple.properties
 표준 설정 파일은 src/main/resources
에
하지만 테스트 케이스별 설정파
일은
개별리소스 폴더에
 src/test/java
◦ com/some/MyTest.java
◦ com/some/MyTest_resource
 spring-context.xml
 waple.properties
 src/main/java가 아닌 src/test/java의
 테스트 케이스 클래스 바로 옆
대상 테스트
케이스
테스트 케이스의
리소스 폴더
테스트 케이스에서
사용하는
리소스,
설정 파일들
앞 예의 spring-context.xml
 테스트를 위한 mock 클래스 설정만.
 기타 모든 설정은 표준 설정과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="callValidationManager"
class="com….InvokerResourceTest_resource.MockCallValidationManager"/>
</beans>
누가 오버라이딩?
 테스트 케이스 Runner를 좀 수정.
 현재 테스트 케이스의 위치를 알아내고
◦ com.some.MyTest
 테스트 케이스 별 리소스 폴더 유무를 보
고
 com.some.MyTest_resource
 존재하면 표준 설정에 테스트 케이스별
설정을 오버라이딩 하여 적용
오버라이딩 방법 - Spring
 자체 지원한다.
 설정 파일을 어레이로 넘기면 됨.
String[] configFiles = …
new ClassPathXmlApplicationContext(configFiles);
오버라이딩 방법 - Hibernate
 자체 지원한다.
 설정 파일을 반복하여 설정하면 됨.
Configuration configuration = …
for(String configFileName : configFileNameList) {
configuration.configure(configFileName);
}
ServiceRegistry serviceRegistry = …
sessionFactory =
configuration.buildSessionFactory(serviceRegistry);
오버라이딩 방법 - Log4j
 지원 않한다.
 설정 파일들을 XML연산하여 하나의
XML로 만들어 처리.
Document mergedConfigDocument =
Log4jConfigMerger.merge(configFileNameList);
// get root from mergedConfigDocument
Element rootElement = ...
DOMConfigurator.configure(rootElement);
오버라이딩 방법 - properties
 이를 위한 Spring의 것을 활용
<bean id="properties"
class="com.kthcorp.waple.fortest.OverridablePropertiesFactoryBean">
<property name="locations">
<value>classpath:/waple.properties</value>
</property>
</bean>
public class OverridablePropertiesFactoryBean extends PropertiesFactoryBean
{
@Override public void setLocations(Resource[] locations) {
String testCaseClassName = getTestCaseClassName();
Resource testResource = findTestResource(testCaseClassName, ...);
Recource[] newLocations = ... // locations와 testResource를 합한다.
굳이 이렇게 까지…
 삽질을 피할 수 있다면.
 프로젝트 차원의 프레임웤.
maven 표준과 벗어났네.
 테스트에 사용되는 리소스는 다양하다.
◦ mock 클래스
◦ 리소스 클래스
◦ 설정 파일
◦ 데이터 파일
 리소스들을 테스트 클래스 가까이 두
고 싶었다.
삽질은 아무리 열심히 해도 삽질
…
어떻게든 삽질을 피할 방법을 찾
아야…

Más contenido relacionado

La actualidad más candente

테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9명환 안
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블YongEun Choi
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기Heo Seungwook
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약YongEun Choi
 
테스트자동화 성공전략
테스트자동화 성공전략테스트자동화 성공전략
테스트자동화 성공전략SangIn Choung
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 SangIn Choung
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드rupert kim
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전주항 박
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리EG Lim
 
구글테스트
구글테스트구글테스트
구글테스트진화 손
 
Guitar
GuitarGuitar
Guitarymtech
 

La actualidad más candente (20)

Unit Test With J Unit
Unit Test With J UnitUnit Test With J Unit
Unit Test With J Unit
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
 
테스트자동화 성공전략
테스트자동화 성공전략테스트자동화 성공전략
테스트자동화 성공전략
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전포스트모템디버깅과 프로세스 덤프 실전
포스트모템디버깅과 프로세스 덤프 실전
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
TEST?
TEST?TEST?
TEST?
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리
 
구글테스트
구글테스트구글테스트
구글테스트
 
Guitar
GuitarGuitar
Guitar
 

Similar a 오버라이딩을 사용한 테스트 시의 설정 처리

refactoring database
refactoring databaserefactoring database
refactoring database기룡 남
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)DK Lee
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업Hyunwoo Kim
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료수홍 이
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancementsbeamofhope
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentChangHyeon Bae
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델KU HUISEONG
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 

Similar a 오버라이딩을 사용한 테스트 시의 설정 처리 (20)

refactoring database
refactoring databaserefactoring database
refactoring database
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
 
Openface
OpenfaceOpenface
Openface
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Tdd
TddTdd
Tdd
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델
 
S66 goos-w7
S66 goos-w7S66 goos-w7
S66 goos-w7
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
E government framework
E government frameworkE government framework
E government framework
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 

Más de 도형 임

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담도형 임
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning도형 임
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing도형 임
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게도형 임
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능도형 임
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기도형 임
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거도형 임
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.도형 임
 
Release and versioning
Release and versioningRelease and versioning
Release and versioning도형 임
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화도형 임
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학도형 임
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발도형 임
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드도형 임
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해도형 임
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발도형 임
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는도형 임
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기도형 임
 
팀장님 근데 Cmmi가 뭐에여
팀장님 근데 Cmmi가 뭐에여팀장님 근데 Cmmi가 뭐에여
팀장님 근데 Cmmi가 뭐에여도형 임
 

Más de 도형 임 (20)

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.
 
Release and versioning
Release and versioningRelease and versioning
Release and versioning
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기
 
팀장님 근데 Cmmi가 뭐에여
팀장님 근데 Cmmi가 뭐에여팀장님 근데 Cmmi가 뭐에여
팀장님 근데 Cmmi가 뭐에여
 

오버라이딩을 사용한 테스트 시의 설정 처리

  • 1. 오버라이딩을 사용한 테스트 시의 설정 처리 임도형 dh-rim@hanmail.net @dhrim00
  • 2. 발표자 소개  Java 개발자  서버 개발자  개발 문화  삽질 증오
  • 3. 중요한 테스트 케이스  삽질 회피의 핵심 스킬.  엄청 중요 : 작업된 결과가 새로운 버그 가 되지 않기 위해선  모든 테스트 케이스는 항상 성공하여 야 한다.
  • 4. 쉽지 않은 테스트 케이스  작성하기도 쉽지 않고  깨지지 않게 지키기 쉽지 않다. 정말 어 렵다. 쌈도 많이 난다.
  • 5. 왜 깨질까?  작성 때하고 지금하고 달라져서 ◦ 설치 폴더 구성이… ◦ DB의 상황이… ◦ 설정 파일이…
  • 6. 누구의 책임?  뭔가 수정했다. 그랫더니 저어쪽 테스 트 케이스가 실패한다.  ‘모든 테스트 케이스는 항상 성공해야 한다’
  • 7. 설정 파일의 난립  보통, 특정 테스트를 위해 특정 설정만 변경해 줄 필요가 있다.  설정 파일을 카피하고, 해당 부분만 수 정한다.
  • 12. 보통, 안한다.  아주 귀찮다.  경우에 따라선 어렵다.  그냥 깨지게 놔둔다.  혹은 @Ignore 처리해 버린다.
  • 13. 설정 오버라이딩?  테스트를 위해 수정한 부분만 가지고 있자.  그리고 그 부분만 오버라이딩 하자.
  • 15. 표준만 수정 해도 오케바리
  • 16. Waple 프로젝트  ApiStore의 엔진 서버  Maven을 사용  표준 폴더 구조 ◦ src/main/java ◦ src/test/java ◦ src/main/resources ◦ src/test/resources
  • 17. 4가지 설정 파일  log4j_config.xml  hibernate_config.xml  spring-context.xml  waple.properties  표준 설정 파일은 src/main/resources 에
  • 18. 하지만 테스트 케이스별 설정파 일은 개별리소스 폴더에  src/test/java ◦ com/some/MyTest.java ◦ com/some/MyTest_resource  spring-context.xml  waple.properties  src/main/java가 아닌 src/test/java의  테스트 케이스 클래스 바로 옆
  • 19. 대상 테스트 케이스 테스트 케이스의 리소스 폴더 테스트 케이스에서 사용하는 리소스, 설정 파일들
  • 20. 앞 예의 spring-context.xml  테스트를 위한 mock 클래스 설정만.  기타 모든 설정은 표준 설정과 같다. <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="callValidationManager" class="com….InvokerResourceTest_resource.MockCallValidationManager"/> </beans>
  • 21. 누가 오버라이딩?  테스트 케이스 Runner를 좀 수정.  현재 테스트 케이스의 위치를 알아내고 ◦ com.some.MyTest  테스트 케이스 별 리소스 폴더 유무를 보 고  com.some.MyTest_resource  존재하면 표준 설정에 테스트 케이스별 설정을 오버라이딩 하여 적용
  • 22. 오버라이딩 방법 - Spring  자체 지원한다.  설정 파일을 어레이로 넘기면 됨. String[] configFiles = … new ClassPathXmlApplicationContext(configFiles);
  • 23. 오버라이딩 방법 - Hibernate  자체 지원한다.  설정 파일을 반복하여 설정하면 됨. Configuration configuration = … for(String configFileName : configFileNameList) { configuration.configure(configFileName); } ServiceRegistry serviceRegistry = … sessionFactory = configuration.buildSessionFactory(serviceRegistry);
  • 24. 오버라이딩 방법 - Log4j  지원 않한다.  설정 파일들을 XML연산하여 하나의 XML로 만들어 처리. Document mergedConfigDocument = Log4jConfigMerger.merge(configFileNameList); // get root from mergedConfigDocument Element rootElement = ... DOMConfigurator.configure(rootElement);
  • 25. 오버라이딩 방법 - properties  이를 위한 Spring의 것을 활용 <bean id="properties" class="com.kthcorp.waple.fortest.OverridablePropertiesFactoryBean"> <property name="locations"> <value>classpath:/waple.properties</value> </property> </bean> public class OverridablePropertiesFactoryBean extends PropertiesFactoryBean { @Override public void setLocations(Resource[] locations) { String testCaseClassName = getTestCaseClassName(); Resource testResource = findTestResource(testCaseClassName, ...); Recource[] newLocations = ... // locations와 testResource를 합한다.
  • 26. 굳이 이렇게 까지…  삽질을 피할 수 있다면.  프로젝트 차원의 프레임웤.
  • 27. maven 표준과 벗어났네.  테스트에 사용되는 리소스는 다양하다. ◦ mock 클래스 ◦ 리소스 클래스 ◦ 설정 파일 ◦ 데이터 파일  리소스들을 테스트 클래스 가까이 두 고 싶었다.
  • 28. 삽질은 아무리 열심히 해도 삽질 … 어떻게든 삽질을 피할 방법을 찾 아야…