Upload
dohyoung-rim
View
548
Download
1
Embed Size (px)
DESCRIPTION
프로젝트가 진행될 수록 특정 테스트 만을 위한 설정 파일 수가 엄청 증가합니다. 그런데 설정파일은 변경될 수 밖에 없고, 카피해 두었던 테스트를 위한 설정파일들은 그 표준과 달라서 기존 테스트들을 깨지게 합니다. 설정 오버라이딩 이라는 개념을 도입하여 깔끔히 처리하는 방법을 소개합니다.
Citation preview
오버라이딩을 사용한 테스트 시의 설정 처리임도형[email protected]@dhrim00
발표자 소개Java 개발자서버 개발자
개발 문화삽질 증오
중요한 테스트 케이스삽질 회피의 핵심 스킬 .
엄청 중요 : 작업된 결과가 새로운 버그가 되지 않기 위해선
모든 테스트 케이스는 항상 성공하여야 한다 .
쉽지 않은 테스트 케이스작성하기도 쉽지 않고깨지지 않게 지키기 쉽지 않다 . 정말
어렵다 . 쌈도 많이 난다 .
왜 깨질까 ?작성 때하고 지금하고 달라져서
◦설치 폴더 구성이…◦DB 의 상황이…◦설정 파일이…
누구의 책임 ?뭔가 수정했다 . 그랫더니 저어쪽 테스트
케이스가 실패한다 .
‘ 모든 테스트 케이스는 항상 성공해야 한다’
설정 파일의 난립보통 , 특정 테스트를 위해 특정 설정만
변경해 줄 필요가 있다 .
설정 파일을 카피하고 , 해당 부분만 수정한다 .
카피와 수정
표준을 수정하면
다 깨진다
전부 찾아가서 수정해 줘야 한다
보통 , 안한다 .아주 귀찮다 .
경우에 따라선 어렵다 .
그냥 깨지게 놔둔다 .
혹은 @Ignore 처리해 버린다 .
설정 오버라이딩 ?테스트를 위해 수정한 부분만 가지고
있자 .그리고 그 부분만 오버라이딩 하자 .
다른 부분만 설정
표준만 수정 해도 오케바리
Waple 프로젝트ApiStore 의 엔진 서버Maven 을 사용표준 폴더 구조
◦src/main/java◦src/test/java◦src/main/resources◦src/test/resources
4 가지 설정 파일log4j_config.xmlhibernate_config.xmlspring-context.xmlwaple.properties
표준 설정 파일은 src/main/re-sources 에
하지만 테스트 케이스별 설정파일은 개별리소스 폴더에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 = Log4jConfig-Merger.merge(configFileNameList);
// get root from mergedConfigDocumentElement 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 Proper-tiesFactoryBean {
@Override public void setLocations(Resource[] locations) {
String testCaseClassName = getTestCaseClassName();
Resource testResource = findTestResource(testCaseClassName, ...);
Recource[] newLocations = ... // locations 와 testRe-source 를 합한다 .
super.setLocations(newLocations);
굳이 이렇게 까지…삽질을 피할 수 있다면 .
프로젝트 차원의 프레임웤 .
maven 표준과 벗어났네 .테스트에 사용되는 리소스는 다양하다 .
◦mock 클래스◦리소스 클래스◦설정 파일◦데이터 파일
리소스들을 테스트 클래스 가까이 두고 싶었다 .
삽질은 아무리 열심히 해도 삽질…
어떻게든 삽질을 피할 방법을 찾아야…