SlideShare une entreprise Scribd logo
1  sur  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 클래스
◦ 리소스 클래스
◦ 설정 파일
◦ 데이터 파일
 리소스들을 테스트 클래스 가까이 두
고 싶었다.
삽질은 아무리 열심히 해도 삽질
…
어떻게든 삽질을 피할 방법을 찾
아야…

Contenu connexe

Tendances

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
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
Heo Seungwook
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
YongEun Choi
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
Suwon Chae
 

Tendances (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
 

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

refactoring database
refactoring databaserefactoring database
refactoring database
기룡 남
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
Hyosung 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 Enhancements
beamofhope
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
Jaehoonyam
 

Similaire à 오버라이딩을 사용한 테스트 시의 설정 처리 (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절)
 

Plus de 도형 임

Plus 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. 삽질은 아무리 열심히 해도 삽질 … 어떻게든 삽질을 피할 방법을 찾 아야…