xUnitTestPattern/chapter8

2,041 views

Published on

xUnitTestPattern/chapter8
2010년 아꿈사 스터디

Published in: Technology
  • Be the first to comment

xUnitTestPattern/chapter8

  1. 1. xUnit Test Pattern8장. 1회용 픽스처 관리 20장. 픽스처 설치 패턴<br />아키텍트를 꿈꾸는 사람들(http://cafe.naver.com/architect1)<br />현수명 (http://soomong.tistory.com)<br />
  2. 2. <ul><li>Test Fixture 용어
  3. 3. 신선한 Fixture 생성
  4. 4. 인라인 설치In-line Setup
  5. 5. 위임 설치Delegated Setup
  6. 6. 암묵적 설치Implicit Setup
  7. 7. 1회용 신선한 Fixture 해체
  8. 8. 가비지 컬렉션 해체Garbage Collected Teardown</li></li></ul><li>xUnit Test Pattern<br />
  9. 9. <ul><li>Test Fixture 용어
  10. 10. 신선한 Fixture 생성
  11. 11. 인라인 설치In-line Setup
  12. 12. 위임 설치Delegated Setup
  13. 13. 암묵적 설치Implicit Setup
  14. 14. 1회용 신선한 Fixture 해체
  15. 15. 가비지 컬렉션 해체Garbage Collected Teardown</li></li></ul><li>Test Fixture 용어<br />Fixture픽스처<br />픽스처 란 무엇인가요?<br /> SUT 를 실행하기 위해 해줘야 하는 모든것<br /> System Under Test<br />테스트 대상 시스템<br />테스트하려는 대상 모두를 줄인말<br />
  16. 16. Test Fixture 용어<br />Fixture픽스처<br />픽스처 란 무엇인가요?<br />
  17. 17. Test Fixture 용어<br />Fixture픽스처<br />픽스처 란 무엇인가요?<br />테스트를 반복적으로 수행할 수 있게 도와주고 매번 동일한 결과를 얻을 수 있게 도와주는 ‘기반이 되는 상태나 환경’<br />고품질 쾌속개발을 위한 <br />TDD 실천법과 도구<br />-한빛미디어<br />일관된 테스트 실행환경이라고도 하며, 때로는 테스트 컨텍스트라 부르기도 한다. <br />테스트 케이스에서 사용할 객체의 인스턴스를 만든다든가, 데이터베이스와 연동할수있는 참조를 선언한다든가, 파일이나 네트워크 등의 자원을 만들어 지정한다든가 하는 등의 작업 혹은 그 작업의 결과로 만들어진 대상을 통칭한다.<br />
  18. 18. Test Fixture 용어<br />Fresh Fixture<br /> 신선한 픽스처<br />신선한 픽스처란?<br />각 테스트가 깨끗한 상태의 픽스처를 새로 만들어서 쓰는것<br />이전에 사용된적이 없는 신선하고 새로운 픽스처<br />
  19. 19. Test Fixture 용어<br />Fresh Fixture<br /> 신선한 픽스처<br />무엇이 1회용 신선한 픽스처인가?<br />픽스처가 메모리에만 있고, 지역변수나 인스턴스 변수에만 저장돼 있다면<br />테스트가 끝날때 친절한 가비지 컬렉션 해체가 알아서 없애준다.<br />픽스처가 지속적이라면 이런일은 일어나지 않는다.<br />픽스처를 신선하게 유지하는 방법<br /> 1. 테스트가 끝날때마다 픽스처를 해체하는것<br /> 2. 이전 픽스처를 그대로 두고 새로운 픽스처를 충돌하지 않게 만드는것<br />
  20. 20. <ul><li>Test Fixture 용어
  21. 21. 신선한 Fixture 생성
  22. 22. 인라인 설치In-line Setup
  23. 23. 위임 설치Delegated Setup
  24. 24. 암묵적 설치Implicit Setup
  25. 25. 1회용 신선한 Fixture 해체
  26. 26. 가비지 컬렉션 해체Garbage Collected Teardown</li></li></ul><li>신선한 Fixture 생성<br />신선한 Fixture 생성<br />신선한 픽스처를 설치하는 패턴 3가지<br />1. 인라인 설치<br /> 2. 위임 설치<br /> 3. 암묵적 설치<br />How it works<br />2. When to use it<br />3. Example<br />4. Refactoring notes<br />
  27. 27. Fixture Setup Pattern<br />In-line Setup<br /> 인라인 설치<br />How it works<br />각 테스트 메소드에 필요한 테스트 픽스처를 생성하기 위한 SUT 코드를 직접 호출<br />2. When to use it<br />- 픽스처 설치 로직이 매우 간단할때<br />- 테스트를 처음 작성할때라서 아직 픽스처의 어느부분이 계속 반복될지 모를때<br />- 픽스처 설치 코드를 리팩토링 할때<br />
  28. 28. Fixture Setup Pattern<br />In-line Setup<br /> 인라인 설치<br />3. Example<br />Fixture 설치<br />단점 <br />테스트 코드 중복<br />-> 깨지기 쉬운 테스트<br />-> 애매한 테스트<br />-> 하드 코딩된 테스트 데이터<br />4. Refactoring notes<br />리팩토링이 필요하다!<br />
  29. 29. Fixture Setup Pattern<br />Delegated Setup<br /> 위임 설치<br />How it works<br />각 테스트 메소드에서는 하나이상의 생성메소드로 필요한 픽스처를 생성,설치<br />2. When to use it<br /><ul><li>테스트 코드 중복을 피하면서 테스트 메소드안에 픽스처의 본질을 남겨놓고 싶을때
  30. 30. 테스트의 의도가 흐트러지는것을 막고 싶을때</li></li></ul><li>Fixture Setup Pattern<br />Delegated Setup<br /> 위임 설치<br />3. Motivating Example<br />4. Refactoring notes<br />픽스처 설치 코드에서 자주 반복되는 코드를 <br />-> 의도가 드러나는 이름을 붙여서!<br />-> 메소드 뽑아내기!<br />Intent Revealing Name<br />의도가 드러나는 이름<br />Name your methods (and variables) based on <br />the intent of the user (caller for methods). <br />Describe the goal they would seek to fulfil, <br />not the mechanism or algorithm used to fullfil it.<br />Kent Beck's "Smalltalk Best Practice Patterns"<br />
  31. 31. Fixture Setup Pattern<br />Delegated Setup<br /> 위임 설치<br />5. Example<br /> Fixture 설치<br />단점장점<br />테스트 코드 중복<br />깨지기 쉬운 테스트<br />여러 동작 냄새들<br />
  32. 32. Fixture Setup Pattern<br />Creation Method<br /> 생성 메소드<br />How it works<br />객체를 생성하는 함수<br />변형: 인자를 받는 생성 메소드<br />변형: 익명 생성 메소드<br />변형: 인자를 받는 익명 생성 메소드<br />변형: 이름 있는 상태 도달 메소드<br />변형: 첨부 메소드<br />2. When to use it<br /><ul><li>신선한 픽스처를 생성하기가 꽤 복잡할때
  33. 33. 시스템의 API 가 자주 바뀔때</li></li></ul><li>Fixture Setup Pattern<br />Creation Method<br /> 생성 메소드<br />3. Motivating Example<br />4. Refactoring notes<br />픽스처 설치 코드에서 자주 반복되는 코드를 <br />-> 의도가 드러나는 이름을 붙여서!<br />-> 메소드 뽑아내기!<br />
  34. 34. Fixture Setup Pattern<br />Creation Method<br /> 생성 메소드<br />5.1 Example : 익명 생성 메소드<br />5.2 Example : 인자를 받는 생성 메소드<br />
  35. 35. Fixture Setup Pattern<br />Creation Method<br /> 생성 메소드<br />5.3 Example : 첨부 메소드<br />
  36. 36. Fixture Setup Pattern<br />Creation Method<br /> 생성 메소드<br />5.4 Example : 픽스처 설치를 위한 테스트 재사용<br />다른 테스트 클래스에서 생성메소드를<br />재사용 할 수 있다<br />
  37. 37. Fixture Setup Pattern<br />Implicit Setup<br /> 암묵적 설치<br />How it works<br />테스트 클래스 안에 있는 setUp메소드를 통해 동일한 신선한 픽스처를 생성한다?<br />setUp() 메소드 ?<br />
  38. 38. 신선한 Fixture 생성<br />Test Fixture Method<br />테스트 픽스처 메소드<br />Junit 3<br /> - setUp()<br /> - tearDown()<br />고품질 쾌속개발을 위한 <br />TDD 실천법과 도구<br />-한빛미디어<br />setUp()<br />testAAA()<br />tearDown()<br />setUp()<br />testBBB()<br />tearDown()<br />…<br />setUp()<br />……<br />tearDown()<br />
  39. 39. 신선한 Fixture 생성<br />Test Fixture Method<br />테스트 픽스처 메소드<br />JUnit 4<br /> - @Before - @BeforeClass<br /> - @After - @AfterClass<br /> Annotation 애노테이션<br />마치 주석처럼 @ 기호화 함께 <br />선언적인 형태로 코드에 달려 있는 문장<br />@BeforeClass<br />고품질 쾌속개발을 위한 <br />TDD 실천법과 도구<br />-한빛미디어<br />@Before<br />@Test<br />@After<br />@Before<br />@Test<br />@After<br />…<br />@Before<br />@Test<br />@After<br />@AfterClass<br />
  40. 40. Fixture Setup Pattern<br />Implicit Setup<br /> 암묵적 설치<br />How it works<br />테스트 클래스 안에 있는 setUp메소드를 통해 동일한 신선한 픽스처를 생성한다!<br />2. When to use it<br />-같은 테스트 케이스 클래스에 있는 여러 테스트 메소드에서<br />같은 신선한 픽스처를 필요로 할 때<br />
  41. 41. Fixture Setup Pattern<br />Implicit Setup<br /> 암묵적 설치<br />3. Motivating Example<br />4. Refactoring notes<br />죄다 메소드 뽑아내기!<br />
  42. 42. Fixture Setup Pattern<br />Implicit Setup<br /> 암묵적 설치<br />5. Example<br />setUp()<br />testAAA()<br />tearDown()<br />setUp()<br />testBBB()<br />tearDown()<br />…<br />단점 <br />테스트 를 이해하기 어렵다<br />픽스처 안에서 객체를 지역변수에 담을수 없다<br />setUp()<br />……<br />tearDown()<br />
  43. 43. 신선한 Fixture 생성<br />설치 메소드의 오용<br /> 새 망치가 생기면 전부 못으로 보인다!<br />Fixture Setup Pattern 을 공부했다고 <br />설치 메소드를 남발하면 안좋아요<br />Setup 메소드에서 최소 픽스쳐가 아닌 <br />일반픽스쳐를 생성한다면 문제가 생길 수 있다. <br />일반 픽스처는 생성하는데 많은 시간이 필요하기 때문에<br />느린 테스트의 일반적인 원인이 된다.<br />
  44. 44. 신선한 Fixture 생성<br />혼합형 픽스처 설치<br />픽스처 설치의 3가지 방법을 <br />서로 철저하게 따로 써야 할 것 같지만<br />실제로는 이것들을 섞어서 쓸 때 더 가치를 발한다.<br />
  45. 45. <ul><li>Test Fixture 용어
  46. 46. 신선한 Fixture 생성
  47. 47. 인라인 설치In-line Setup
  48. 48. 위임 설치Delegated Setup
  49. 49. 암묵적 설치Implicit Setup
  50. 50. 1회용 신선한 Fixture 해체
  51. 51. 가비지 컬렉션 해체</li></ul>Garbage Collected Teardown<br />
  52. 52. 1회용 신선한 Fixture 해체<br />1회용 신선한 픽스처 해체<br />가비지 컬렉션 해체<br />픽스처가 지역변수나 인스턴스 변수에만 <br />저장돼 있다면 테스트가 끝날때 <br />친절한 가비지 컬렉션 해체가 알아서 없애준다.<br />
  53. 53. Fixture Teardown<br />Pattern<br />Garbage Collected Teardown<br /> 가비지 컬렉션 해체<br />How it works<br />가비지 컬렉션을 이용해서 픽스처를 해체<br />2. When to use it<br /><ul><li>큰 노력없이 쉽게 픽스처를 해체 하고싶을때
  54. 54. 픽스처 해체 코드가 테스트코드를 어지럽히고 있다 생각될때</li></li></ul><li>Fixture Teardown<br />Pattern<br />Garbage Collected Teardown<br /> 가비지 컬렉션 해체<br />3. Motivating Example<br />4. Refactoring notes<br />필요없어보이는 해체 루틴 제거!<br />
  55. 55. Fixture Teardown<br />Pattern<br />Garbage Collected Teardown<br /> 가비지 컬렉션 해체<br />5. Example<br />Garbage Collection<br />
  56. 56. <ul><li>Test Fixture 용어
  57. 57. 신선한 Fixture 생성
  58. 58. 인라인 설치In-line Setup
  59. 59. 위임 설치Delegated Setup
  60. 60. 암묵적 설치Implicit Setup
  61. 61. 1회용 신선한 Fixture 해체
  62. 62. 가비지 컬렉션 해체Garbage Collected Teardown</li></li></ul><li>Reference<br />xUnit테스트 패턴 – 에이콘<br />고품질 쾌속개발을 위한 TDD 실천법과 도구 - 한빛미디어<br />
  63. 63. 감사합니다<br />

×