SlideShare a Scribd company logo
1 of 21
Download to read offline
xUnit Test Patterns

9장. 지속되는 픽스처 관리
           안명환 http://eritaka.net
         아꿈사 http://andstudy.com
지속되는 신선한 픽스처

            1회용
 신선한
 픽스처


 I’m here
            지속되는    공유
                   픽스처



             불변
             공유
            픽스처
지속 & 신선 픽스처?
• 신선한 픽스처 젂략
 – 테스트 메소드를 실행할 때마다 픽스처를 새로
   생성
 – 픽스처를 재사용 안함
  • 픽스처가 1회용이라는 의미가 아님


• 지속되는 신선한 픽스처?
 – 픽스처는 새로 생성하나 이젂 상태가 남아있다!
픽스처는 지속되면 안되나요?
• 반복 안 되는 테스트 발생
 – 테스트가 그때 그때 결과가 다르다

              생성(pk id: 1)
   setUp                            DOC

    test_1

             생성(pk id: 1)     픽스처
   setUp
                                    DB
                PK 충돌
    test_2


                             SUT
픽스처가 지속되는 이유
• SUT에서 데이터베이스를 사용하는 경우

• SUT에서 클래스 변수에 데이터를 저장하
  는 경우

• 무엇이 됐든 픽스처의 상태가 남아있게 된
  경우 (보통은 외부 리소스)
 – 예) .net의 Dispose 호출을 안했을 경우
지속되는 신선한 픽스처 해체
• 해체 코드는 없는 게 최선
 – 테스트 이해에 도움이 되지 않는다
 – 즉, 가비지 컬렉션 해체가 좋다
조잡한 인라인 해체

public void testGetFlightsByOriginAirport() {
  //픽스처 설치
  BigDecimal outboundAirport = createTestAirport(‚10F‛);
  try {
     // 시스템 실행
     List flightsAtDestination1 =
        façade.getFlightsByOriginAirport(outboundAirport);
     // 결과 검증
     assertEquals(0, flightsAtDestination1.size());
  } finally {
     façade.removeAirport(outboundAirport);
  }
}
암묵적 해체
• 대부분의 xUnit 에서 지원
• 테스트 통과, 실패 여부에 상관없이 호출
픽스처 설치 젂략과 해체 젂략

                      해체 메커니즘

 설치 메커니즘   인라인 해체    위임 해체      암묵적 해체

인라인 설치     권장하지 않음   사용 가능      권장

위임 설치      권장하지 않음   사용 가능      권장

암묵적 설치     권장하지 않음   권장하지 않음    권장




• 일단 암묵적 해체는 묻지마 추천!
자동 해체
• 게으르고 창조적인 개발자를 위한 해체 코
  드 자동화
 – 생성 메소드를 통해 자원을 설치
 – 등록된 자원 자동 해체
데이터베이스 해체
• 테이블 삭제 해체




• 트랜잭션 롤백 해체
해체 코드 필요 없게 맊들기
• 이런 일을 하지 않게 맊드는 것이 최선
• 테스트 대역 사용
 – 가짜 데이터베이스 등
공유 픽스처

     설치
                    픽스처
     실행

     검증
실행
     해체       SUT
검증

해체
공유 픽스처의 필요성
• 느린 테스트
 – 개발자에게 스타2를 하게 맊든다 (좋을지도;)
 – 원인
  • 대부분 픽스처가 DB에 저장되어 있는 경우
공유 픽스처 생성 패턴

                공유
               픽스처



                          스위트
미리 맊든   게으른     설치               엯결
                          픽스처
 픽스처     설치   데코레이션             테스트
                           설치

              공유 픽스처 설치
게으른(지엯) 설치
• 어떤 픽스처를 필요로 하는 테스트가 처음
  나왔을 때 지엯 초기화로 해당 픽스처 생성
스위트 픽스처 설치
• 처음/마지막 테스트 메소드가 호출되기 젂
  /후에 공유 픽스처를 생성/제거
• JUnit 4.0 의 @BeforeClass,
  @AfterClass
설치 데코레이션
• xUnit에서 스위트 픽스처 설치와 같은 기
  능을 제공하지 않는 경우 사용
• 다른 테스트 케이스 클래스 간에도 공유 가
  능
•
엯결(엮인) 테스트
• 같은 테스트 스위트의 다른 테스트에서 현
  재 테스트의 픽스처를 설치하게 한다.
• 즉, 테스트에서 남겨두는 테스트 픽스처를
  다음에 실행되는 테스트에서 재사용
미리 맊든 픽스처
• 테스트가 실행되기 젂 픽스처 생성
 – DB 스크립트를 이용하여 ‘완벽한 상태’의 DB
   복사 등
끝

More Related Content

What's hot

xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentChangHyeon Bae
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리EG Lim
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼Kenu, GwangNam Heo
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드rupert kim
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약YongEun Choi
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object poolingNam Hyeonuk
 
Python Unittest
Python UnittestPython Unittest
Python Unittest명규 최
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권freeNAVER D2
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
구글테스트
구글테스트구글테스트
구글테스트진화 손
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinderJunHo Yoon
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론GangSeok Lee
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php versionukjinkwoun
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2Byeongsu Kang
 

What's hot (20)

Unit Test With J Unit
Unit Test With J UnitUnit Test With J Unit
Unit Test With J Unit
 
Exception&log
Exception&logException&log
Exception&log
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
 
TDD or TFD
TDD or TFDTDD or TFD
TDD or TFD
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
Python Unittest
Python UnittestPython Unittest
Python Unittest
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
구글테스트
구글테스트구글테스트
구글테스트
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinder
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php version
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 
데이콘 뽀개기
데이콘 뽀개기데이콘 뽀개기
데이콘 뽀개기
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 

Viewers also liked

xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16suitzero
 
xUnitTestPattern/chapter3
xUnitTestPattern/chapter3xUnitTestPattern/chapter3
xUnitTestPattern/chapter3수윤 장
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증dagri82
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동Hyosung Jeon
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴Suan Lee
 
holubonpatternschapter42
holubonpatternschapter42holubonpatternschapter42
holubonpatternschapter42수윤 장
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
9장 도메인 주도 설계
9장 도메인 주도 설계9장 도메인 주도 설계
9장 도메인 주도 설계Hyosung Jeon
 

Viewers also liked (9)

xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16
 
xUnitTestPattern/chapter3
xUnitTestPattern/chapter3xUnitTestPattern/chapter3
xUnitTestPattern/chapter3
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴
 
holubonpatternschapter42
holubonpatternschapter42holubonpatternschapter42
holubonpatternschapter42
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
9장 도메인 주도 설계
9장 도메인 주도 설계9장 도메인 주도 설계
9장 도메인 주도 설계
 

Similar to xUnitTestPattern/chapter9

xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8hyun soomyung
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testing[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testingDaeHyun Sung
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용Youngjae Kim
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성NAVER D2
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
효율적인 개발 프로세스를 위한 지속적 통합
효율적인 개발 프로세스를 위한 지속적 통합효율적인 개발 프로세스를 위한 지속적 통합
효율적인 개발 프로세스를 위한 지속적 통합홍렬 임
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)SangIn Choung
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)DK Lee
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 

Similar to xUnitTestPattern/chapter9 (20)

xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testing[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testing
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
효율적인 개발 프로세스를 위한 지속적 통합
효율적인 개발 프로세스를 위한 지속적 통합효율적인 개발 프로세스를 위한 지속적 통합
효율적인 개발 프로세스를 위한 지속적 통합
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
쉽고 빠르게 접하는 오픈스택
쉽고 빠르게 접하는 오픈스택쉽고 빠르게 접하는 오픈스택
쉽고 빠르게 접하는 오픈스택
 
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 

Recently uploaded

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Recently uploaded (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

xUnitTestPattern/chapter9

  • 1. xUnit Test Patterns 9장. 지속되는 픽스처 관리 안명환 http://eritaka.net 아꿈사 http://andstudy.com
  • 2. 지속되는 신선한 픽스처 1회용 신선한 픽스처 I’m here 지속되는 공유 픽스처 불변 공유 픽스처
  • 3. 지속 & 신선 픽스처? • 신선한 픽스처 젂략 – 테스트 메소드를 실행할 때마다 픽스처를 새로 생성 – 픽스처를 재사용 안함 • 픽스처가 1회용이라는 의미가 아님 • 지속되는 신선한 픽스처? – 픽스처는 새로 생성하나 이젂 상태가 남아있다!
  • 4. 픽스처는 지속되면 안되나요? • 반복 안 되는 테스트 발생 – 테스트가 그때 그때 결과가 다르다 생성(pk id: 1) setUp DOC test_1 생성(pk id: 1) 픽스처 setUp DB PK 충돌 test_2 SUT
  • 5. 픽스처가 지속되는 이유 • SUT에서 데이터베이스를 사용하는 경우 • SUT에서 클래스 변수에 데이터를 저장하 는 경우 • 무엇이 됐든 픽스처의 상태가 남아있게 된 경우 (보통은 외부 리소스) – 예) .net의 Dispose 호출을 안했을 경우
  • 6. 지속되는 신선한 픽스처 해체 • 해체 코드는 없는 게 최선 – 테스트 이해에 도움이 되지 않는다 – 즉, 가비지 컬렉션 해체가 좋다
  • 7. 조잡한 인라인 해체 public void testGetFlightsByOriginAirport() { //픽스처 설치 BigDecimal outboundAirport = createTestAirport(‚10F‛); try { // 시스템 실행 List flightsAtDestination1 = façade.getFlightsByOriginAirport(outboundAirport); // 결과 검증 assertEquals(0, flightsAtDestination1.size()); } finally { façade.removeAirport(outboundAirport); } }
  • 8. 암묵적 해체 • 대부분의 xUnit 에서 지원 • 테스트 통과, 실패 여부에 상관없이 호출
  • 9. 픽스처 설치 젂략과 해체 젂략 해체 메커니즘 설치 메커니즘 인라인 해체 위임 해체 암묵적 해체 인라인 설치 권장하지 않음 사용 가능 권장 위임 설치 권장하지 않음 사용 가능 권장 암묵적 설치 권장하지 않음 권장하지 않음 권장 • 일단 암묵적 해체는 묻지마 추천!
  • 10. 자동 해체 • 게으르고 창조적인 개발자를 위한 해체 코 드 자동화 – 생성 메소드를 통해 자원을 설치 – 등록된 자원 자동 해체
  • 11. 데이터베이스 해체 • 테이블 삭제 해체 • 트랜잭션 롤백 해체
  • 12. 해체 코드 필요 없게 맊들기 • 이런 일을 하지 않게 맊드는 것이 최선 • 테스트 대역 사용 – 가짜 데이터베이스 등
  • 13. 공유 픽스처 설치 픽스처 실행 검증 실행 해체 SUT 검증 해체
  • 14. 공유 픽스처의 필요성 • 느린 테스트 – 개발자에게 스타2를 하게 맊든다 (좋을지도;) – 원인 • 대부분 픽스처가 DB에 저장되어 있는 경우
  • 15. 공유 픽스처 생성 패턴 공유 픽스처 스위트 미리 맊든 게으른 설치 엯결 픽스처 픽스처 설치 데코레이션 테스트 설치 공유 픽스처 설치
  • 16. 게으른(지엯) 설치 • 어떤 픽스처를 필요로 하는 테스트가 처음 나왔을 때 지엯 초기화로 해당 픽스처 생성
  • 17. 스위트 픽스처 설치 • 처음/마지막 테스트 메소드가 호출되기 젂 /후에 공유 픽스처를 생성/제거 • JUnit 4.0 의 @BeforeClass, @AfterClass
  • 18. 설치 데코레이션 • xUnit에서 스위트 픽스처 설치와 같은 기 능을 제공하지 않는 경우 사용 • 다른 테스트 케이스 클래스 간에도 공유 가 능 •
  • 19. 엯결(엮인) 테스트 • 같은 테스트 스위트의 다른 테스트에서 현 재 테스트의 픽스처를 설치하게 한다. • 즉, 테스트에서 남겨두는 테스트 픽스처를 다음에 실행되는 테스트에서 재사용
  • 20. 미리 맊든 픽스처 • 테스트가 실행되기 젂 픽스처 생성 – DB 스크립트를 이용하여 ‘완벽한 상태’의 DB 복사 등
  • 21.