28
오오오오오오 오오오 오오오 오오 오오 오오 오오오 [email protected] @dhrim00

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

Embed Size (px)

DESCRIPTION

프로젝트가 진행될 수록 특정 테스트 만을 위한 설정 파일 수가 엄청 증가합니다. 그런데 설정파일은 변경될 수 밖에 없고, 카피해 두었던 테스트를 위한 설정파일들은 그 표준과 달라서 기존 테스트들을 깨지게 합니다. 설정 오버라이딩 이라는 개념을 도입하여 깔끔히 처리하는 방법을 소개합니다.

Citation preview

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

오버라이딩을 사용한 테스트 시의 설정 처리임도형[email protected]@dhrim00

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

발표자 소개Java 개발자서버 개발자

개발 문화삽질 증오

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

중요한 테스트 케이스삽질 회피의 핵심 스킬 .

엄청 중요 : 작업된 결과가 새로운 버그가 되지 않기 위해선

모든 테스트 케이스는 항상 성공하여야 한다 .

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

쉽지 않은 테스트 케이스작성하기도 쉽지 않고깨지지 않게 지키기 쉽지 않다 . 정말

어렵다 . 쌈도 많이 난다 .

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

왜 깨질까 ?작성 때하고 지금하고 달라져서

◦설치 폴더 구성이…◦DB 의 상황이…◦설정 파일이…

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

누구의 책임 ?뭔가 수정했다 . 그랫더니 저어쪽 테스트

케이스가 실패한다 .

‘ 모든 테스트 케이스는 항상 성공해야 한다’

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

설정 파일의 난립보통 , 특정 테스트를 위해 특정 설정만

변경해 줄 필요가 있다 .

설정 파일을 카피하고 , 해당 부분만 수정한다 .

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

카피와 수정

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

표준을 수정하면

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

다 깨진다

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

전부 찾아가서 수정해 줘야 한다

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

보통 , 안한다 .아주 귀찮다 .

경우에 따라선 어렵다 .

그냥 깨지게 놔둔다 .

혹은 @Ignore 처리해 버린다 .

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

설정 오버라이딩 ?테스트를 위해 수정한 부분만 가지고

있자 .그리고 그 부분만 오버라이딩 하자 .

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

다른 부분만 설정

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

표준만 수정 해도 오케바리

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

Waple 프로젝트ApiStore 의 엔진 서버Maven 을 사용표준 폴더 구조

◦src/main/java◦src/test/java◦src/main/resources◦src/test/resources

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

4 가지 설정 파일log4j_config.xmlhibernate_config.xmlspring-context.xmlwaple.properties

표준 설정 파일은 src/main/re-sources 에

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

하지만 테스트 케이스별 설정파일은 개별리소스 폴더에src/test/java

◦com/some/MyTest.java◦com/some/MyTest_resource

spring-context.xml waple.properties

src/main/java 가 아닌 src/test/java의

테스트 케이스 클래스 바로 옆

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

대상 테스트 케이스

테스트 케이스의리소스 폴더

테스트 케이스에서 사용하는리소스 ,

설정 파일들

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

앞 예의 spring-context.xml

테스트를 위한 mock 클래스 설정만 .기타 모든 설정은 표준 설정과 같다 .

<?xml version="1.0" encoding="UTF-8"?><beans>

<bean id="callValidationManager" class="com….InvokerResourceTest_resource.MockCallValidationManager"/>

</beans>

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

누가 오버라이딩 ?테스트 케이스 Runner 를 좀 수정 .

현재 테스트 케이스의 위치를 알아내고◦com.some.MyTest

테스트 케이스 별 리소스 폴더 유무를 보고 com.some.MyTest_resource

존재하면 표준 설정에 테스트 케이스별 설정을 오버라이딩 하여 적용

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

오버라이딩 방법 - Spring자체 지원한다 .설정 파일을 어레이로 넘기면 됨 .

String[] configFiles = …

new ClassPathXmlApplicationContext(configFiles);

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

오버라이딩 방법 - Hibernate자체 지원한다 .설정 파일을 반복하여 설정하면 됨 .

Configuration configuration = …

for(String configFileName : configFileNameList) {configuration.configure(configFileName);

}

ServiceRegistry serviceRegistry = …

sessionFactory = configuration.buildSessionFactory(serviceRegistry);

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

오버라이딩 방법 - Log4j지원 않한다 .설정 파일들을 XML 연산하여 하나의

XML 로 만들어 처리 .Document mergedConfigDocument = Log4jConfig-Merger.merge(configFileNameList);

// get root from mergedConfigDocumentElement rootElement = ...

DOMConfigurator.configure(rootElement);

Page 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 Proper-tiesFactoryBean {

@Override public void setLocations(Resource[] locations) {

String testCaseClassName = getTestCaseClassName();

Resource testResource = findTestResource(testCaseClassName, ...);

Recource[] newLocations = ... // locations 와 testRe-source 를 합한다 .

super.setLocations(newLocations);

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

굳이 이렇게 까지…삽질을 피할 수 있다면 .

프로젝트 차원의 프레임웤 .

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

maven 표준과 벗어났네 .테스트에 사용되는 리소스는 다양하다 .

◦mock 클래스◦리소스 클래스◦설정 파일◦데이터 파일

리소스들을 테스트 클래스 가까이 두고 싶었다 .

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

삽질은 아무리 열심히 해도 삽질…

어떻게든 삽질을 피할 방법을 찾아야…