SlideShare a Scribd company logo
1 of 14
xUnit
xUnit
• 여러 단위 테스트 프레임워크를 통칭
xUnit 이름 해당 언어 관련 사이트
CUnit C http://cunit.sourceforge.net/
CppUnit C++
https://sourceforge.net/projec
ts/cppunit/
PHPUnit PHp https://phpunit.de/
PyUnit Python http://pyunit.sourceforge.net/
JUnit Java http://junit.org/
JUnit
• 단위 테스트 Framework 중 하나
• 오픈소스, 최신 relese : Junit 5, Junit 4.12
• Annotation 기반 동작 방식
• Assert statement(단정문)로 테스트 케이스 결과를 판단
• 테스트 결과 확인(성공 or 실패), 수행 시간 확인 가능
JUnit 장점
• 실제 서비스 소스와의 분리
• 테스트 대상을 분석하고자 하는 단위에만 집중
• main()으로 테스트 X ---> Junit 프레임워크가 직접 코드 실행
• 테스트 케이스와 결과를 문서가 아닌 테스트 클래스로 남김
• 나아가 TDD의 수단으로 활용
• 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
JUnit annotation
• @Test - 해당 메소드는 테스트 대상 메소드
• @BeforeClass - 해당 클래스 테스트가 수행되기 최초에 한번 수
행
• @AfterClass - 해당 클래스 테스트가 모두 수행되고 마지막에
한번 수행
• @Before – 테스트 메소드가 수행되기 전에 수행
• @After – 테스트 메소드가 수행된 후에 수행
JUnit 테스트 라이프사이클
assert statement
• 대표적인 assert 관련 메소드
• assertEqual : 두 객체의 Equality 비교
• assertSame : 두 객체의 Identity 비교 (hashCode 주소값)
• assertTrue/False : 예상 값의 참/거짓을 판별
• assertNull/NotNull : 대상 값이 null/not null 이면 참
• fail([message]) : 호출 즉시 테스트 케이스를 실패로 판정
assertThat
• public static <T> void assertThat(T actual, Matcher<? super T> matcher)
• hamcrest 라이브러리
• Matcher 인터페이스와 *Matcher 구현체들
• JUnit 특정 버전 이후로 hamcrest 라이브러리 dependency
• assertThat(테스트 대상, Matcher 구문);
• assertThat("메시지", 테스트 대상, Matcher 구문);
assertThat
• 자연스럽고 읽기 쉬운 코드를 위해 사용
• 사용전
• assertEquals(“Youngwoo”, customer.getName());
• 사용후
• assertThat(customer.getName(), is(“Youngwoo”));
• assertThat("Zero is one", 0, is(1)); // fails
• assertThat("Zero is not one", 0, is(not(1))); // passes
JUnit4 특징
• Java 1.5 annotation 지원
• test라는 글자로 method 이름을 시작해야 하는 제약 해소
• 더 유연한 픽스처(Fixture)
• @BeforeClass, @AfterClass, @Before(JUnit3 setUp 메소드), @After(JUnit3 tearDown
메소드)
• 예외 테스트
• @Test(expected=NumberFormatException.class)
• 시간 제한 테스트
• @Test(timeout=1000)
• 테스트 무시
• @Ignore(“this method isn’t working yet”)
• 배열 지원
• assertArrayEquals([message], expected, acutal);
JUnit4 특징
• @RunWith(클래스 이름.class)
• JUnit Test 클래스를 실행시키는 러너(Runner)를 명시적으로 지정
• ex) @RunWith(SpringJUnit4ClassRunner.class)
• @RunWith는 junit.runner.Runner를 구현한 외부 클래스를 인자로 갖는
다.
• @SuiteClasses(Class[])
• 보통 여러 개의 테스트 클래스를 수행하기 위해 쓰임
• @RunWith를 이용해 Suite.class를 러너로 사용한다.
• @RunWith(Suite.class)
@SuiteClasses(ATest.class, BTest.class, CTest.class)
JUnit5
• JUnit 5 is the result of JUnit Lambda and its crowdfunding
campaign on Indiegogo.
• http://javacan.tistory.com/entry/JUnit-5-Intro
• https://junit.org/junit5/
SpringMVC JUnit Test
• JUnit + org.springframework.test 패키지
• MockMvc mock-up 객체 사용
• http://jhmocu.tistory.com/133
참고
• https://ko.wikipedia.org/wiki/XUnit
• http://www.nextree.co.kr/p11104/
• https://junit.org/junit5/
• http://javacan.tistory.com/entry/JUnit-5-Intro
• http://jhmocu.tistory.com/133

More Related Content

What's hot

Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약YongEun Choi
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 SangIn Choung
 
Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Mike JS Choi
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드rupert kim
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9명환 안
 
Python Unittest
Python UnittestPython Unittest
Python Unittest명규 최
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅종빈 오
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 

What's hot (20)

Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)
 
Check style 기초가이드
Check style 기초가이드Check style 기초가이드
Check style 기초가이드
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
xUnitTestPattern/chapter9
xUnitTestPattern/chapter9xUnitTestPattern/chapter9
xUnitTestPattern/chapter9
 
Unit Test With J Unit
Unit Test With J UnitUnit Test With J Unit
Unit Test With J Unit
 
Python Unittest
Python UnittestPython Unittest
Python Unittest
 
Tdd
TddTdd
Tdd
 
X unit 14장
X unit 14장X unit 14장
X unit 14장
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅[실전 윈도우 디버깅] 13 포스트모템 디버깅
[실전 윈도우 디버깅] 13 포스트모템 디버깅
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
TDD with JUnit 2
TDD with JUnit 2TDD with JUnit 2
TDD with JUnit 2
 

Similar to Backend Master | 3.2.1 Test - JUnit

Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
[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
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증dagri82
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2tobeware
 
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...asfasf4
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)SangIn Choung
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우IMQA
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol bufferknight1128
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템강 민우
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basicsJaewon Choi
 
ParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxjunu6
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 

Similar to Backend Master | 3.2.1 Test - JUnit (20)

Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testing[2013.07.16] PythonKorea강남스터디 발표 - flask testing
[2013.07.16] PythonKorea강남스터디 발표 - flask testing
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
 
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
 
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
A tour of C++ : the basics
A tour of C++ : the basicsA tour of C++ : the basics
A tour of C++ : the basics
 
ParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptx
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 

More from Kyunghun Jeon

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionKyunghun Jeon
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalKyunghun Jeon
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationKyunghun Jeon
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleKyunghun Jeon
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleKyunghun Jeon
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenKyunghun Jeon
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsKyunghun Jeon
 
Backend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheBackend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheKyunghun Jeon
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Kyunghun Jeon
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Kyunghun Jeon
 

More from Kyunghun Jeon (10)

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker Introduction
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy Automation
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - Gradle
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - Maven
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build tools
 
Backend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheBackend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - Ehcache
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
 

Backend Master | 3.2.1 Test - JUnit

  • 2. xUnit • 여러 단위 테스트 프레임워크를 통칭 xUnit 이름 해당 언어 관련 사이트 CUnit C http://cunit.sourceforge.net/ CppUnit C++ https://sourceforge.net/projec ts/cppunit/ PHPUnit PHp https://phpunit.de/ PyUnit Python http://pyunit.sourceforge.net/ JUnit Java http://junit.org/
  • 3. JUnit • 단위 테스트 Framework 중 하나 • 오픈소스, 최신 relese : Junit 5, Junit 4.12 • Annotation 기반 동작 방식 • Assert statement(단정문)로 테스트 케이스 결과를 판단 • 테스트 결과 확인(성공 or 실패), 수행 시간 확인 가능
  • 4. JUnit 장점 • 실제 서비스 소스와의 분리 • 테스트 대상을 분석하고자 하는 단위에만 집중 • main()으로 테스트 X ---> Junit 프레임워크가 직접 코드 실행 • 테스트 케이스와 결과를 문서가 아닌 테스트 클래스로 남김 • 나아가 TDD의 수단으로 활용 • 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
  • 5. JUnit annotation • @Test - 해당 메소드는 테스트 대상 메소드 • @BeforeClass - 해당 클래스 테스트가 수행되기 최초에 한번 수 행 • @AfterClass - 해당 클래스 테스트가 모두 수행되고 마지막에 한번 수행 • @Before – 테스트 메소드가 수행되기 전에 수행 • @After – 테스트 메소드가 수행된 후에 수행
  • 7. assert statement • 대표적인 assert 관련 메소드 • assertEqual : 두 객체의 Equality 비교 • assertSame : 두 객체의 Identity 비교 (hashCode 주소값) • assertTrue/False : 예상 값의 참/거짓을 판별 • assertNull/NotNull : 대상 값이 null/not null 이면 참 • fail([message]) : 호출 즉시 테스트 케이스를 실패로 판정
  • 8. assertThat • public static <T> void assertThat(T actual, Matcher<? super T> matcher) • hamcrest 라이브러리 • Matcher 인터페이스와 *Matcher 구현체들 • JUnit 특정 버전 이후로 hamcrest 라이브러리 dependency • assertThat(테스트 대상, Matcher 구문); • assertThat("메시지", 테스트 대상, Matcher 구문);
  • 9. assertThat • 자연스럽고 읽기 쉬운 코드를 위해 사용 • 사용전 • assertEquals(“Youngwoo”, customer.getName()); • 사용후 • assertThat(customer.getName(), is(“Youngwoo”)); • assertThat("Zero is one", 0, is(1)); // fails • assertThat("Zero is not one", 0, is(not(1))); // passes
  • 10. JUnit4 특징 • Java 1.5 annotation 지원 • test라는 글자로 method 이름을 시작해야 하는 제약 해소 • 더 유연한 픽스처(Fixture) • @BeforeClass, @AfterClass, @Before(JUnit3 setUp 메소드), @After(JUnit3 tearDown 메소드) • 예외 테스트 • @Test(expected=NumberFormatException.class) • 시간 제한 테스트 • @Test(timeout=1000) • 테스트 무시 • @Ignore(“this method isn’t working yet”) • 배열 지원 • assertArrayEquals([message], expected, acutal);
  • 11. JUnit4 특징 • @RunWith(클래스 이름.class) • JUnit Test 클래스를 실행시키는 러너(Runner)를 명시적으로 지정 • ex) @RunWith(SpringJUnit4ClassRunner.class) • @RunWith는 junit.runner.Runner를 구현한 외부 클래스를 인자로 갖는 다. • @SuiteClasses(Class[]) • 보통 여러 개의 테스트 클래스를 수행하기 위해 쓰임 • @RunWith를 이용해 Suite.class를 러너로 사용한다. • @RunWith(Suite.class) @SuiteClasses(ATest.class, BTest.class, CTest.class)
  • 12. JUnit5 • JUnit 5 is the result of JUnit Lambda and its crowdfunding campaign on Indiegogo. • http://javacan.tistory.com/entry/JUnit-5-Intro • https://junit.org/junit5/
  • 13. SpringMVC JUnit Test • JUnit + org.springframework.test 패키지 • MockMvc mock-up 객체 사용 • http://jhmocu.tistory.com/133
  • 14. 참고 • https://ko.wikipedia.org/wiki/XUnit • http://www.nextree.co.kr/p11104/ • https://junit.org/junit5/ • http://javacan.tistory.com/entry/JUnit-5-Intro • http://jhmocu.tistory.com/133

Editor's Notes

  1. 처음 켄트 벡(Kent Beck) 이라는 사람이 테스트 프레임워크를 고안. SUint 이라는걸 처음 만들었는데 나중에 에릭 감마(Erich Gamma) 라는 사람과 Java에 포팅하여 JUnit을 만들어냄. 그 이후에 다양한 언어에 포팅 되어져서 CppUnit(C++ 용), NUnit(.NET 용) 같은 것이 나왔고, 이를 전부 xUnit 이라고 통칭하게 되었음. 그 중에서 저희는 JUnit....
  2. 지식 내재화 or 다른 개발자한테 시스템을 이해시킬 때.. TDD (RED, GREEN, REFACTORING) 테스트 코드 작성, 성공시키는 최소한의 코드, 리팩토링
  3. - 그 외에도 굉장히 많음