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