SlideShare a Scribd company logo
xUnit Test Pattern8장. 1회용 픽스처 관리				20장. 픽스처 설치 패턴아키텍트를 꿈꾸는 사람들(http://cafe.naver.com/architect1)현수명  (http://soomong.tistory.com)
Test Fixture 용어
 신선한 Fixture 생성
인라인 설치In-line Setup
위임 설치Delegated Setup
암묵적 설치Implicit Setup
1회용 신선한 Fixture 해체
가비지 컬렉션 해체Garbage Collected TeardownxUnit Test Pattern
Test Fixture 용어
 신선한 Fixture 생성
인라인 설치In-line Setup
위임 설치Delegated Setup
암묵적 설치Implicit Setup
1회용 신선한 Fixture 해체
가비지 컬렉션 해체Garbage Collected TeardownTest Fixture 용어Fixture픽스처픽스처 란 무엇인가요?	SUT 를 실행하기 위해 해줘야 하는 모든것    System Under Test테스트 대상 시스템테스트하려는 대상 모두를 줄인말
Test Fixture 용어Fixture픽스처픽스처 란 무엇인가요?
Test Fixture 용어Fixture픽스처픽스처 란 무엇인가요?테스트를 반복적으로 수행할 수 있게 도와주고 매번 동일한 결과를 얻을 수 있게 도와주는 ‘기반이 되는 상태나 환경’고품질 쾌속개발을 위한 TDD 실천법과 도구-한빛미디어일관된 테스트 실행환경이라고도 하며, 때로는 테스트 컨텍스트라 부르기도 한다. 테스트 케이스에서 사용할 객체의 인스턴스를 만든다든가, 데이터베이스와 연동할수있는 참조를 선언한다든가, 파일이나 네트워크 등의 자원을 만들어 지정한다든가 하는 등의 작업 혹은 그 작업의 결과로 만들어진 대상을 통칭한다.
Test Fixture 용어Fresh Fixture                                           신선한 픽스처신선한 픽스처란?각 테스트가 깨끗한 상태의 픽스처를 새로 만들어서 쓰는것이전에 사용된적이 없는 신선하고 새로운 픽스처
Test Fixture 용어Fresh Fixture                                           신선한 픽스처무엇이 1회용 신선한 픽스처인가?픽스처가 메모리에만 있고, 지역변수나 인스턴스 변수에만 저장돼 있다면테스트가 끝날때 친절한 가비지 컬렉션 해체가 알아서 없애준다.픽스처가 지속적이라면 이런일은 일어나지 않는다.픽스처를 신선하게 유지하는 방법	1. 테스트가 끝날때마다 픽스처를 해체하는것	2. 이전 픽스처를 그대로 두고 새로운 픽스처를 충돌하지 않게 만드는것
Test Fixture 용어
 신선한 Fixture 생성
인라인 설치In-line Setup
위임 설치Delegated Setup
암묵적 설치Implicit Setup
1회용 신선한 Fixture 해체
가비지 컬렉션 해체Garbage Collected Teardown신선한 Fixture 생성신선한 Fixture 생성신선한 픽스처를 설치하는 패턴 3가지1. 인라인 설치	2. 위임 설치	3. 암묵적 설치How it works2. When to use it3. Example4. Refactoring notes
Fixture Setup PatternIn-line Setup                                           인라인 설치How it works각 테스트 메소드에 필요한 테스트 픽스처를 생성하기 위한 SUT 코드를 직접 호출2. When to use it- 픽스처 설치 로직이 매우 간단할때- 테스트를 처음 작성할때라서 아직 픽스처의 어느부분이 계속 반복될지 모를때- 픽스처 설치 코드를 리팩토링 할때
Fixture Setup PatternIn-line Setup                                           인라인 설치3. ExampleFixture 설치단점 테스트 코드 중복-> 깨지기 쉬운 테스트-> 애매한 테스트-> 하드 코딩된 테스트 데이터4. Refactoring notes리팩토링이 필요하다!
Fixture Setup PatternDelegated Setup                                           위임 설치How it works각 테스트 메소드에서는 하나이상의 생성메소드로 필요한 픽스처를 생성,설치2. When to use it테스트 코드 중복을 피하면서 테스트 메소드안에 픽스처의 본질을 남겨놓고 싶을때
테스트의 의도가 흐트러지는것을 막고 싶을때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"
Fixture Setup PatternDelegated Setup                                           위임 설치5. Example			Fixture 설치단점장점테스트 코드 중복깨지기 쉬운 테스트여러 동작 냄새들
Fixture Setup PatternCreation Method                                           생성 메소드How it works객체를 생성하는 함수변형: 인자를 받는 생성 메소드변형: 익명 생성 메소드변형: 인자를 받는 익명 생성 메소드변형: 이름 있는 상태 도달 메소드변형: 첨부 메소드2. When to use it신선한 픽스처를 생성하기가 꽤 복잡할때
시스템의 API 가 자주 바뀔때Fixture Setup PatternCreation Method                                           생성 메소드3. Motivating Example4. Refactoring notes픽스처 설치 코드에서 자주 반복되는 코드를 -> 의도가 드러나는 이름을 붙여서!-> 메소드 뽑아내기!
Fixture Setup PatternCreation Method                                           생성 메소드5.1 Example : 익명 생성 메소드5.2 Example : 인자를 받는 생성 메소드
Fixture Setup PatternCreation Method                                           생성 메소드5.3 Example : 첨부 메소드
Fixture Setup PatternCreation Method                                           생성 메소드5.4 Example : 픽스처 설치를 위한 테스트 재사용다른 테스트 클래스에서 생성메소드를재사용 할 수 있다
Fixture Setup PatternImplicit Setup                                           암묵적 설치How it works테스트 클래스 안에 있는 setUp메소드를 통해 동일한 신선한 픽스처를 생성한다?setUp() 메소드 ?

More Related Content

PDF
구글테스트
PDF
시작하자 단위테스트
PDF
Check style 기초가이드
PPTX
C++ 프로젝트에 단위 테스트 도입하기
PDF
KGC2010 - 낡은 코드에 단위테스트 넣기
PDF
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
PDF
Io t에서의 소프트웨어단위테스트_접근사례
PDF
Python 테스트 시작하기
구글테스트
시작하자 단위테스트
Check style 기초가이드
C++ 프로젝트에 단위 테스트 도입하기
KGC2010 - 낡은 코드에 단위테스트 넣기
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
Io t에서의 소프트웨어단위테스트_접근사례
Python 테스트 시작하기

What's hot (20)

PPTX
X unit 14장
PPTX
JUnit 지원 라이브러리 소개
PDF
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
PDF
Python Unittest
PPTX
TDD - Test Driven Development
PDF
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
PDF
Legacy code refactoring video rental system
PDF
TDD&Refactoring Day 03: TDD
PDF
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
PDF
Rest api 테스트 수행가이드
PPT
Unit Test With J Unit
PDF
Spring 교육 자료
PPTX
xUnitTestPattern/chapter12
PPTX
테스트자동화와 TDD
PPTX
Introduce Katalon tool
PPT
목 오브젝트(Mock Object)의 이해
PDF
오픈 스펙을 대상으로 한 테스트설계사례
PDF
테스트자동화 성공전략
PDF
Java 기초
PDF
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
X unit 14장
JUnit 지원 라이브러리 소개
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Python Unittest
TDD - Test Driven Development
[고급과정] 코드 테스트와 커버리지 교육(실습위주)
Legacy code refactoring video rental system
TDD&Refactoring Day 03: TDD
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
Rest api 테스트 수행가이드
Unit Test With J Unit
Spring 교육 자료
xUnitTestPattern/chapter12
테스트자동화와 TDD
Introduce Katalon tool
목 오브젝트(Mock Object)의 이해
오픈 스펙을 대상으로 한 테스트설계사례
테스트자동화 성공전략
Java 기초
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
Ad

Viewers also liked (17)

PPTX
MapReduce
PPTX
[페차쿠차] 배움의 기술
PPTX
HTML5 & CSS3 - Video,Audio
PPTX
Clojure Chapter.6
PPTX
The Art of Computer Programming 2.3.2 Tree
PPTX
이산수학 Ch.5
PPTX
Hybrid app
PPTX
The Art of Computer Programming 1.2.5
PPTX
The Art of Computer Programming 2.4 다중연결구조
PPTX
Domain Driven Design
PPTX
프로그램은 왜 실패하는가?
PPTX
Dependency Breaking Techniques
PDF
실전 윈도우 디버깅. Ch3. 디버거 해부
PPTX
프로그래머의 길,멘토에게 묻다 2장
PPTX
5장 그래프의 비밀 (Programming Game AI by Example)
PPTX
예제로 보는 Pattern 연상법
PPTX
Scalable Web Architecture and Distributed Systems
MapReduce
[페차쿠차] 배움의 기술
HTML5 & CSS3 - Video,Audio
Clojure Chapter.6
The Art of Computer Programming 2.3.2 Tree
이산수학 Ch.5
Hybrid app
The Art of Computer Programming 1.2.5
The Art of Computer Programming 2.4 다중연결구조
Domain Driven Design
프로그램은 왜 실패하는가?
Dependency Breaking Techniques
실전 윈도우 디버깅. Ch3. 디버거 해부
프로그래머의 길,멘토에게 묻다 2장
5장 그래프의 비밀 (Programming Game AI by Example)
예제로 보는 Pattern 연상법
Scalable Web Architecture and Distributed Systems
Ad

Similar to xUnitTestPattern/chapter8 (20)

PDF
xUnitTestPattern/chapter9
PDF
xUnitTestPattern/chapter7
PDF
xunittestpatternchapter15
PDF
Devon 2011-b-5 효과적인 레거시 코드 다루기
PPTX
Visual studio team system with agile tech days 2010
PDF
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
PPTX
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
PPT
카사 공개세미나1회 W.E.L.C.
PPTX
More effective c++ 3주차
PDF
The Introduction to Refactoring
PDF
C++ 코드 품질 관리 비법
PPT
Working Effectively With Legacy Code - xp2005
PPTX
김성훈 - 뛰어난 디버거가 되는 방법
PDF
HolubOnPatterns/chapter2_2
PDF
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
PDF
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
PPTX
120908 레거시코드활용전략 4장5장
PPTX
깨끗한 코드 (클린 코드, Clean Code)
PDF
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
PDF
NDC08_실시간비주얼그래프편집
xUnitTestPattern/chapter9
xUnitTestPattern/chapter7
xunittestpatternchapter15
Devon 2011-b-5 효과적인 레거시 코드 다루기
Visual studio team system with agile tech days 2010
NDC2011 - 카메라 시스템을 통해 살펴보는 인터랙티브 시스템 개발의 문제점
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
카사 공개세미나1회 W.E.L.C.
More effective c++ 3주차
The Introduction to Refactoring
C++ 코드 품질 관리 비법
Working Effectively With Legacy Code - xp2005
김성훈 - 뛰어난 디버거가 되는 방법
HolubOnPatterns/chapter2_2
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
120908 레거시코드활용전략 4장5장
깨끗한 코드 (클린 코드, Clean Code)
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
NDC08_실시간비주얼그래프편집

More from hyun soomyung (6)

PPTX
아꿈사 매니저소개
PPTX
MongoDB
PPTX
Design Pattern - Multithread Ch10
PPTX
The Art of Computer Programming 1.3.2 MIXAL
PPTX
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
PPTX
아꿈사 매니저소개
MongoDB
Design Pattern - Multithread Ch10
The Art of Computer Programming 1.3.2 MIXAL
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)

xUnitTestPattern/chapter8

  • 1. xUnit Test Pattern8장. 1회용 픽스처 관리 20장. 픽스처 설치 패턴아키텍트를 꿈꾸는 사람들(http://cafe.naver.com/architect1)현수명 (http://soomong.tistory.com)
  • 8. 가비지 컬렉션 해체Garbage Collected TeardownxUnit Test Pattern
  • 15. 가비지 컬렉션 해체Garbage Collected TeardownTest Fixture 용어Fixture픽스처픽스처 란 무엇인가요? SUT 를 실행하기 위해 해줘야 하는 모든것 System Under Test테스트 대상 시스템테스트하려는 대상 모두를 줄인말
  • 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"
  • 31. Fixture Setup PatternDelegated Setup 위임 설치5. Example Fixture 설치단점장점테스트 코드 중복깨지기 쉬운 테스트여러 동작 냄새들
  • 32. Fixture Setup PatternCreation Method 생성 메소드How it works객체를 생성하는 함수변형: 인자를 받는 생성 메소드변형: 익명 생성 메소드변형: 인자를 받는 익명 생성 메소드변형: 이름 있는 상태 도달 메소드변형: 첨부 메소드2. When to use it신선한 픽스처를 생성하기가 꽤 복잡할때
  • 33. 시스템의 API 가 자주 바뀔때Fixture Setup PatternCreation Method 생성 메소드3. Motivating Example4. Refactoring notes픽스처 설치 코드에서 자주 반복되는 코드를 -> 의도가 드러나는 이름을 붙여서!-> 메소드 뽑아내기!
  • 34. Fixture Setup PatternCreation Method 생성 메소드5.1 Example : 익명 생성 메소드5.2 Example : 인자를 받는 생성 메소드
  • 35. Fixture Setup PatternCreation Method 생성 메소드5.3 Example : 첨부 메소드
  • 36. Fixture Setup PatternCreation Method 생성 메소드5.4 Example : 픽스처 설치를 위한 테스트 재사용다른 테스트 클래스에서 생성메소드를재사용 할 수 있다
  • 37. Fixture Setup PatternImplicit Setup 암묵적 설치How it works테스트 클래스 안에 있는 setUp메소드를 통해 동일한 신선한 픽스처를 생성한다?setUp() 메소드 ?
  • 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-같은 테스트 케이스 클래스에 있는 여러 테스트 메소드에서같은 신선한 픽스처를 필요로 할 때
  • 41. Fixture Setup PatternImplicit Setup 암묵적 설치3. Motivating Example4. Refactoring notes죄다 메소드 뽑아내기!
  • 42. Fixture Setup PatternImplicit Setup 암묵적 설치5. ExamplesetUp()testAAA()tearDown()setUp()testBBB()tearDown()…단점 테스트 를 이해하기 어렵다픽스처 안에서 객체를 지역변수에 담을수 없다setUp()……tearDown()
  • 43. 신선한 Fixture 생성설치 메소드의 오용 새 망치가 생기면 전부 못으로 보인다!Fixture Setup Pattern 을 공부했다고 설치 메소드를 남발하면 안좋아요Setup 메소드에서 최소 픽스쳐가 아닌 일반픽스쳐를 생성한다면 문제가 생길 수 있다. 일반 픽스처는 생성하는데 많은 시간이 필요하기 때문에느린 테스트의 일반적인 원인이 된다.
  • 44. 신선한 Fixture 생성혼합형 픽스처 설치픽스처 설치의 3가지 방법을 서로 철저하게 따로 써야 할 것 같지만실제로는 이것들을 섞어서 쓸 때 더 가치를 발한다.
  • 52. 1회용 신선한 Fixture 해체1회용 신선한 픽스처 해체가비지 컬렉션 해체픽스처가 지역변수나 인스턴스 변수에만 저장돼 있다면 테스트가 끝날때 친절한 가비지 컬렉션 해체가 알아서 없애준다.
  • 53. Fixture TeardownPatternGarbage Collected Teardown 가비지 컬렉션 해체How it works가비지 컬렉션을 이용해서 픽스처를 해체2. When to use it큰 노력없이 쉽게 픽스처를 해체 하고싶을때
  • 54. 픽스처 해체 코드가 테스트코드를 어지럽히고 있다 생각될때Fixture TeardownPatternGarbage Collected Teardown 가비지 컬렉션 해체3. Motivating Example4. Refactoring notes필요없어보이는 해체 루틴 제거!
  • 55. Fixture TeardownPatternGarbage Collected Teardown 가비지 컬렉션 해체5. ExampleGarbage Collection
  • 62. 가비지 컬렉션 해체Garbage Collected TeardownReferencexUnit테스트 패턴 – 에이콘고품질 쾌속개발을 위한 TDD 실천법과 도구 - 한빛미디어