SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
TDDwith JUnit
Test
Driven
Development
Junyoung Lee
14년 5월 28일 수요일
Never in the field of software development
was so much owed by
so many to so few lines of code
- Martin Fowler
14년 5월 28일 수요일
Need
무엇을 테스트 할 것인가?
Test
실패하는 테스트 작성
Code
테스트를 통과하는 코드 작성
Refactoring
코드의 중복 제거
TDD Flow
Remind
14년 5월 28일 수요일
단위 테스트 프레임워크의 몇 가지 규칙
단위 테스트는 다른 모든 단위 테스트들과 독립적으로 실행되어야 한다.
프레임 워크는 테스트 각각의 오류를 식별하고 보고해야 한다.
어떤 테스트를 실행할 지 선택하기 쉬워야 한다.
14년 5월 28일 수요일
JUnit의 설계 목표
유용한 테스트를 작성하는 데 보탬이 되어야 한다.
시간이 지나도 가치가 변치 않는 테스트를 작성하는 데 보탬이 되어야 한다.
코드 재사용을 통해 테스트 작성 비용을 낮추는 데 보탬이 되어야 한다.
14년 5월 28일 수요일
계산기 클래스에서 시작하기
public class Calculator {
	 public double add(double number1, double number2) {
	 	 return number1 + number2;
	 }
}
14년 5월 28일 수요일
public static void main(String[] args) {
	 Calculator calculator = new Calculator();
	 double result = calculator.add(10, 50);
	 if (result != 60) {
	 	 System.out.println("Bad result: " + result);
	 }
}
간단한 add 메서드 테스트
14년 5월 28일 수요일
개선된 add 메서드 테스트
private int nbErrors = 0;
public void testAdd() {
	 Calculator calculator = new Calculator();
	 double result = calculator.add(10, 50);
	 if (result != 60) {
	 	 throw new IllegalStateException("Bad Request: " + result);
	 }
}
public static void main(String[] args) {
	 CalculatorTest test = new CalculatorTest();
	 try {
	 	 test.testAdd();
	 } catch (Throwable e) {
	 	 test.nbErrors++;
	 	 e.printStackTrace();
	 }
	
	 if (test.nbErrors > 0) {
	 	 throw new IllegalStateException("There were " + test.nbErrors + " error(s)");
	 }
}
14년 5월 28일 수요일
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
	 @Test
	 public void testAdd() {
	 	 Calculator calculator = new Calculator();
	 	 double result = calculator.add(10, 50);
	 	 assertEquals(60, result, 0);
	 }
}
JUnit을 적용한 add 메서드 테스트
14년 5월 28일 수요일
JUnit
 핵심
 들여다
 보기
14년 5월 28일 수요일
JUnit의 핵심
테스트 클래스가 되기 위한 조건
- public 클래스
- 기본 생성자
테스트 메서드 되기 위한 조건
- @Test
- public 메서드
- 파라미터 X
- 반환형은 void
14년 5월 28일 수요일
JUnit의 핵심
JUnit은 각 @Test 메서드를 호출할 때 마다
테스트 클래스의 인스턴스를 새로 생성한다.
14년 5월 28일 수요일
JUnit의 핵심
테스트 검증에는 Assert 클래스에 정의된 assert 메서드를 사용
assertXxx 메서드
assertArrayEquals(“message”, A, B)
assertEquals(“message”, A, B)
assertSame(“message”, A, B)
assertTrue(“message”, A)
assertNotNull(“message”, A)
...
14년 5월 28일 수요일
테스트 클래스(혹은 테스트 케이스)
@Test가 부여된 테스트를 하나 이상 포함한 클래스.
유사한 기능을 시험하는 테스트들을 함께 묶는데 사용한다.
테스트는 @Test가 부여된 메서드를 말하고,
테스트 케이스는 테스트 메서드를 포함한 클래스를 말함.
대개 테스트할 클래스 하나 당 테스트 클래스 하나를 만듦
14년 5월 28일 수요일
테스트 스위트
테스트들의 집합.
테스트 스위트는 관련된 테스트들을 함께 묶는 편리한 수단
테스트 클래스에 별도의 테스트 스위트가 정의되지 않았다면,
JUnit은 테스트 클래스 내의 모든 테스트를 포함하는
테스트 스위트를 자동으로 만들어 준다.
14년 5월 28일 수요일
테스트 러너
테스트 스위트 실행 엔진.
JUnit에는 테스트를 실행할 수 있는 다양한 러너가 준비되어 있다.
추후 커스텀 러너를 제작할 예정.
14년 5월 28일 수요일
Parameterized 테스트
@RunWith(Parameterized.class)
public class ParameterizedTest {
	 private double expected;
	 private double valueOne;
	 private double valueTwo;
	
	 @Parameters
	 public static CollectionInteger[] getTestParameters() {
	 	 return Arrays.asList(new Integer[][]{
	 	 	 	 {2, 1, 1}, // 예상값, 값1, 값2
	 	 	 	 {3, 2, 1}, // 예상값, 값1, 값2
	 	 	 	 {4, 3, 1}, // 예상값, 값1, 값2
	 	 });
	 }
	 public ParameterizedTest(double expected, double valueOne, double valueTwo) {
	 	 this.expected = expected;
	 	 this.valueOne = valueOne;
	 	 this.valueTwo = valueTwo;
	 }
	 @Test
	 public void sum() {
	 	 Calculator calc = new Calculator();
	 	 assertEquals(expected, calc.add(valueOne, valueTwo), 0);
	 }	
}
14년 5월 28일 수요일
Parameterized 테스트 러너 사용 조건
테스트 클래스에 @RunWith 애노테이션 부착
@RunWith(Parameterized.class)
@Parameters 메서드 필요
public static Collection?[] xxx()
컬렉션에 들어가는 배열의 길이는 생성자에 전달될 파라미터의 길이와 같아야 함
14년 5월 28일 수요일
JUnit이 제공하는 테스트 러너
org.junit.internal.runners.JUnit38ClassRunner
org.junit.runners.JUnit4
org.junit.runners.Parameterized
org.junit.runners.Suite
특정 Runner 지정
@RunWith(러너 클래스 이름.class)
14년 5월 28일 수요일
JUnitCore 퍼사드
테스트 수행,
결과 취함,
통계 제공
테스트에 사용할 러너를 자동으로 선정
JUnitCore가 제공하는 정보를 Eclipse의 플러그인에서 GUI 뷰로 보여줌
14년 5월 28일 수요일

Weitere ähnliche Inhalte

Was ist angesagt?

C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기Heo Seungwook
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블YongEun Choi
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit TestingYeon Soo Kim
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool재연 김
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약YongEun Choi
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드SangIn Choung
 
구글테스트
구글테스트구글테스트
구글테스트진화 손
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
Clean code
Clean codeClean code
Clean codebbongcsu
 

Was ist angesagt? (19)

C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
 
Effective Unit Testing
Effective Unit TestingEffective Unit Testing
Effective Unit Testing
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 
Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약Effective unit testing - 좋은테스트 요약
Effective unit testing - 좋은테스트 요약
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
구글테스트
구글테스트구글테스트
구글테스트
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
S66 goos-w7
S66 goos-w7S66 goos-w7
S66 goos-w7
 
Clean code
Clean codeClean code
Clean code
 

Andere mochten auch

팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기Junyoung Lee
 
강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)Junyoung Lee
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, pecoDaegwon Kim
 
Slideshare font test
Slideshare font testSlideshare font test
Slideshare font testJunyoung Lee
 
Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비Junyoung Lee
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoulJoeun Park
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식Matthew (정재화)
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 

Andere mochten auch (15)

Dropbox 꿀팁
Dropbox 꿀팁Dropbox 꿀팁
Dropbox 꿀팁
 
팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기팀프로젝트 활짝 피우기
팀프로젝트 활짝 피우기
 
강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)강의 전 준비(GitHub가입, git 클라이언트 설치)
강의 전 준비(GitHub가입, git 클라이언트 설치)
 
Unit Test With J Unit
Unit Test With J UnitUnit Test With J Unit
Unit Test With J Unit
 
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
커맨드 라인 도구 활용하기 - zsh + oh-my-zsh, tmux, peco
 
Slideshare font test
Slideshare font testSlideshare font test
Slideshare font test
 
Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비Git 더하기 GitHub 강의 전 준비
Git 더하기 GitHub 강의 전 준비
 
Git
GitGit
Git
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 

Ähnlich wie TDD with JUnit 2

Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증dagri82
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitKyunghun Jeon
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅NAVER D2
 
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기OKKY
 
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성Lee Sang-Ho
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나JunHak Kim
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental systemJaehoon Oh
 
xUnitTestPattern/chapter7
xUnitTestPattern/chapter7xUnitTestPattern/chapter7
xUnitTestPattern/chapter7종빈 오
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 

Ähnlich wie TDD with JUnit 2 (17)

Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
10장 결과 검증
10장 결과 검증10장 결과 검증
10장 결과 검증
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnit
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
JUnit & AssertJ
JUnit & AssertJJUnit & AssertJ
JUnit & AssertJ
 
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
[OKKYCON] 박재성 - 의식적인 연습으로 TDD, 리팩토링 연습하기
 
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
 
Tdd 4장
Tdd 4장Tdd 4장
Tdd 4장
 
20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나20130118 토비의 스프링 세미나
20130118 토비의 스프링 세미나
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
Android unit testing
Android unit testingAndroid unit testing
Android unit testing
 
xUnitTestPattern/chapter7
xUnitTestPattern/chapter7xUnitTestPattern/chapter7
xUnitTestPattern/chapter7
 
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
Clean code appendix 1
Clean code appendix 1Clean code appendix 1
Clean code appendix 1
 

Kürzlich hochgeladen

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)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
 
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
 
캐드앤그래픽스 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
 

Kürzlich hochgeladen (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
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)
 
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 ...
 
캐드앤그래픽스 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
 

TDD with JUnit 2

  • 2. Never in the field of software development was so much owed by so many to so few lines of code - Martin Fowler 14년 5월 28일 수요일
  • 3. Need 무엇을 테스트 할 것인가? Test 실패하는 테스트 작성 Code 테스트를 통과하는 코드 작성 Refactoring 코드의 중복 제거 TDD Flow Remind 14년 5월 28일 수요일
  • 4. 단위 테스트 프레임워크의 몇 가지 규칙 단위 테스트는 다른 모든 단위 테스트들과 독립적으로 실행되어야 한다. 프레임 워크는 테스트 각각의 오류를 식별하고 보고해야 한다. 어떤 테스트를 실행할 지 선택하기 쉬워야 한다. 14년 5월 28일 수요일
  • 5. JUnit의 설계 목표 유용한 테스트를 작성하는 데 보탬이 되어야 한다. 시간이 지나도 가치가 변치 않는 테스트를 작성하는 데 보탬이 되어야 한다. 코드 재사용을 통해 테스트 작성 비용을 낮추는 데 보탬이 되어야 한다. 14년 5월 28일 수요일
  • 6. 계산기 클래스에서 시작하기 public class Calculator { public double add(double number1, double number2) { return number1 + number2; } } 14년 5월 28일 수요일
  • 7. public static void main(String[] args) { Calculator calculator = new Calculator(); double result = calculator.add(10, 50); if (result != 60) { System.out.println("Bad result: " + result); } } 간단한 add 메서드 테스트 14년 5월 28일 수요일
  • 8. 개선된 add 메서드 테스트 private int nbErrors = 0; public void testAdd() { Calculator calculator = new Calculator(); double result = calculator.add(10, 50); if (result != 60) { throw new IllegalStateException("Bad Request: " + result); } } public static void main(String[] args) { CalculatorTest test = new CalculatorTest(); try { test.testAdd(); } catch (Throwable e) { test.nbErrors++; e.printStackTrace(); } if (test.nbErrors > 0) { throw new IllegalStateException("There were " + test.nbErrors + " error(s)"); } } 14년 5월 28일 수요일
  • 9. import org.junit.Test; import static org.junit.Assert.*; public class CalculatorTest { @Test public void testAdd() { Calculator calculator = new Calculator(); double result = calculator.add(10, 50); assertEquals(60, result, 0); } } JUnit을 적용한 add 메서드 테스트 14년 5월 28일 수요일
  • 10. JUnit
  • 14. JUnit의 핵심 테스트 클래스가 되기 위한 조건 - public 클래스 - 기본 생성자 테스트 메서드 되기 위한 조건 - @Test - public 메서드 - 파라미터 X - 반환형은 void 14년 5월 28일 수요일
  • 15. JUnit의 핵심 JUnit은 각 @Test 메서드를 호출할 때 마다 테스트 클래스의 인스턴스를 새로 생성한다. 14년 5월 28일 수요일
  • 16. JUnit의 핵심 테스트 검증에는 Assert 클래스에 정의된 assert 메서드를 사용 assertXxx 메서드 assertArrayEquals(“message”, A, B) assertEquals(“message”, A, B) assertSame(“message”, A, B) assertTrue(“message”, A) assertNotNull(“message”, A) ... 14년 5월 28일 수요일
  • 17. 테스트 클래스(혹은 테스트 케이스) @Test가 부여된 테스트를 하나 이상 포함한 클래스. 유사한 기능을 시험하는 테스트들을 함께 묶는데 사용한다. 테스트는 @Test가 부여된 메서드를 말하고, 테스트 케이스는 테스트 메서드를 포함한 클래스를 말함. 대개 테스트할 클래스 하나 당 테스트 클래스 하나를 만듦 14년 5월 28일 수요일
  • 18. 테스트 스위트 테스트들의 집합. 테스트 스위트는 관련된 테스트들을 함께 묶는 편리한 수단 테스트 클래스에 별도의 테스트 스위트가 정의되지 않았다면, JUnit은 테스트 클래스 내의 모든 테스트를 포함하는 테스트 스위트를 자동으로 만들어 준다. 14년 5월 28일 수요일
  • 19. 테스트 러너 테스트 스위트 실행 엔진. JUnit에는 테스트를 실행할 수 있는 다양한 러너가 준비되어 있다. 추후 커스텀 러너를 제작할 예정. 14년 5월 28일 수요일
  • 20. Parameterized 테스트 @RunWith(Parameterized.class) public class ParameterizedTest { private double expected; private double valueOne; private double valueTwo; @Parameters public static CollectionInteger[] getTestParameters() { return Arrays.asList(new Integer[][]{ {2, 1, 1}, // 예상값, 값1, 값2 {3, 2, 1}, // 예상값, 값1, 값2 {4, 3, 1}, // 예상값, 값1, 값2 }); } public ParameterizedTest(double expected, double valueOne, double valueTwo) { this.expected = expected; this.valueOne = valueOne; this.valueTwo = valueTwo; } @Test public void sum() { Calculator calc = new Calculator(); assertEquals(expected, calc.add(valueOne, valueTwo), 0); } } 14년 5월 28일 수요일
  • 21. Parameterized 테스트 러너 사용 조건 테스트 클래스에 @RunWith 애노테이션 부착 @RunWith(Parameterized.class) @Parameters 메서드 필요 public static Collection?[] xxx() 컬렉션에 들어가는 배열의 길이는 생성자에 전달될 파라미터의 길이와 같아야 함 14년 5월 28일 수요일
  • 22. JUnit이 제공하는 테스트 러너 org.junit.internal.runners.JUnit38ClassRunner org.junit.runners.JUnit4 org.junit.runners.Parameterized org.junit.runners.Suite 특정 Runner 지정 @RunWith(러너 클래스 이름.class) 14년 5월 28일 수요일
  • 23. JUnitCore 퍼사드 테스트 수행, 결과 취함, 통계 제공 테스트에 사용할 러너를 자동으로 선정 JUnitCore가 제공하는 정보를 Eclipse의 플러그인에서 GUI 뷰로 보여줌 14년 5월 28일 수요일
  • 24. 스위트를 이용한 테스트 조직하기 테스트 클래스가 하나가 아니라면..? 테스트 클래스 하나하나 정성들여 실행? 기본 테스트 러너 기본 스위트 생성 테스트 클래스 실행 14년 5월 28일 수요일
  • 25. 스위트를 이용한 테스트 조직하기 테스트 스위트 작성 @RunWith(Suite.class) @SuiteClassed({Classes..}) 스위트는 테스트 클래스 내의 모든 @Test 메서드들을 찾아 실행하는 일종의 러너. @RunWith(Suite.class) @SuiteClasses({ CalculatorTest.class, ParameterizedTest.class}) public class AllTests { } 14년 5월 28일 수요일
  • 26. 스위트의 스위트 @RunWith(Suite.class) @SuiteClasses({CalculatorTest.class}) public class TestSuiteA { } @RunWith(Suite.class) @SuiteClasses({ParameterizedTest.class}) public class TestSuiteB { } @RunWith(Suite.class) @SuiteClasses({TestSuiteA.class, TestSuiteB.class}) public class MasterTestSuite { } 14년 5월 28일 수요일