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

1,219 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

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

×