32
TDD with JUnit Test Driven Development Junyoung Lee

Tdd with JUnit 1

  • Upload
    -

  • View
    217

  • Download
    3

Embed Size (px)

DESCRIPTION

TDD with JUnit 1 We are the Java Experts 스터디 자료

Citation preview

Page 1: Tdd with JUnit 1

TDD with JUnitTestDrivenDevelopment

Junyoung Lee

Page 2: Tdd with JUnit 1

대개����������� ������������������  우리는

개발을����������� ������������������  하고

테스트를����������� ������������������  합니다.

Page 3: Tdd with JUnit 1

잘����������� ������������������  돌아가나

?

Page 4: Tdd with JUnit 1

개발 기간이 길어질 수록 개발자의 목표의식이 흐려진다작업이 길어질 수록 확인이 어렵다개발자의 집중력이 필요해진다논리적인 오류를 찾기 어렵다

코드의 사용 방법과 변경 이력을개발자의 기억에 의존하게 된다

귀차니즘의 증가로 테스트를 간소화 하게 된다코드 수정 시 정상 동작을 보장하기 어렵다

테스트를 해보려면 변경 등의 선행 작업이 필요회귀 테스트가 희귀 테스트가 되기 쉽다개발자의 노동력을 필요로 하게 된다

- 테스트 주도 개발 TDD 실천법과 도구 중

Page 5: Tdd with JUnit 1

TDD에서는

테스트를����������� ������������������  작성하고,

개발을����������� ������������������  합니다.

Page 6: Tdd with JUnit 1

코드도����������� ������������������  없는데����������� ������������������  무슨����������� ������������������  테스트를����������� ������������������  먼저?

Page 7: Tdd with JUnit 1

TDD

Page 8: Tdd with JUnit 1

Need무엇을 테스트 할 것인가?

Test실패하는 테스트 작성

Code테스트를 통과하는 코드 작성

Refactoring코드의 중복 제거

TDD Flow

Page 9: Tdd with JUnit 1

Simple CodeRon jeffries said “Clean code that works”

Page 10: Tdd with JUnit 1

예측 가능한 개발 방법이다끊임없이 발생할 버그에 대해 걱정하지 않고

일이 언제 마무리 될 지 알 수 있다코드가 가르쳐주는 모든 교훈을 학습할 기회를 갖게 된다당신이 만든 소프트웨어는 사용자의 삶을 향상시켜 준다

동료들이 당신을 존경할 수 있게 해준다당신 또한 동료들을 존경할 수 있게 된다

작성하는 동안 기분이 좋다

- 테스트 주도 개발 중

Page 11: Tdd with JUnit 1

Getting����������� ������������������  started����������� ������������������  TDDwith����������� ������������������  JUnit

Page 12: Tdd with JUnit 1

Eclipse를 사용할 겁니다.

JUnit 라이브러리를 받습니다.

프로젝트의 빌드 패스에 추가합니다.

시작해 봅시다.

환경 설정

이 정도는 스샷 없어도 되겠쪙?

Page 13: Tdd with JUnit 1

두 날짜의 일 수 차이를 구하는프로그램을 작성해 봅시다.

20140314 - 20140310 = 4

예제 출처 - https://wikidocs.net/224

Page 14: Tdd with JUnit 1

테스트����������� ������������������  케이스����������� ������������������  작성

1. 두 날짜의 차이 일 수를 구한다.

2. 특정 일자의 총 일 수를 구한다.

3. 전년도까지의 총 일수를 구한다. <

4. 전달까지의 총 일수를 구한다.

5. 해당 일자까지의 총 일 수를 구한다.

Page 15: Tdd with JUnit 1

테스트����������� ������������������  코드����������� ������������������  작성

public class SubDateTest extends TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run(SubDateTest.class); } public void testGetYearDay() { assertEquals(0, SubDate.getYearDay(1)); assertEquals(365, SubDate.getYearDay(2)); }}

Page 16: Tdd with JUnit 1

아직 SubDate는 존재하지 않습니다.

왜냐구요?

이제����������� ������������������  만들거니까요.

슬슬����������� ������������������  적응하세요.

Page 17: Tdd with JUnit 1

일단!����������� ������������������  컴파일을����������� ������������������  성공하게����������� ������������������  하기����������� ������������������  위해서

public class SubDate { public static int getYearDay(int year) { return 1; }}

Page 18: Tdd with JUnit 1

테스트����������� ������������������  결과는?성공할����������� ������������������  수����������� ������������������  있을리가����������� ������������������  없죠.

Page 19: Tdd with JUnit 1

테스트를����������� ������������������  성공시켜����������� ������������������  봅시다.

public static int getYearDay(int year) { if (year == 1) return 0; return 365;}

Page 20: Tdd with JUnit 1

짜자잔~

Page 21: Tdd with JUnit 1
Page 22: Tdd with JUnit 1

가장 빨리 테스트를 통과하는

코드를 만들어라.

어떤 죄악을 저질러도 상관없다.

- Kent Beck

Page 23: Tdd with JUnit 1

아직����������� ������������������  getYearDay는완전하지����������� ������������������  않습니다.

아래����������� ������������������  테스트는����������� ������������������  실패하겠죠

assertEquals(365+365+365+366, SubDate.getYearDay(5));

Page 24: Tdd with JUnit 1

public void testLeapYear() { assertTrue(SubDate.isLeapYear(0)); assertFalse(SubDate.isLeapYear(1)); assertTrue(SubDate.isLeapYear(4));}

윤년도����������� ������������������  고려해야겠죠?윤년을����������� ������������������  위한����������� ������������������  테스트����������� ������������������  코드����������� ������������������  작성

Page 25: Tdd with JUnit 1

윤년����������� ������������������  계산����������� ������������������  코드����������� ������������������  작성

ublic static boolean isLeapYear(int year) { if (year == 0) return true; if (year == 1) return false; if (year == 4) return true; return false;}

Page 26: Tdd with JUnit 1

public static boolean isLeapYear(int year) { if (year % 4 == 0) return true; return false;}

리팩토링

Page 27: Tdd with JUnit 1

윤년����������� ������������������  체크����������� ������������������  메서드도����������� ������������������  완전하진����������� ������������������  않습니다.

1. 4로 나누어서 떨어지는 해는 윤년이다.

2. 100으로 나누어서 떨어지는 해는 윤년이 아니다.

3. 400으로 나누어서 떨어지는 해는 윤년이다.

Page 28: Tdd with JUnit 1

public void testLeapYear() { assertTrue(SubDate.isLeapYear(0)); assertFalse(SubDate.isLeapYear(1)); assertTrue(SubDate.isLeapYear(4)); assertTrue(SubDate.isLeapYear(1200)); assertFalse(SubDate.isLeapYear(700));}

테스트����������� ������������������  코드����������� ������������������  수정

Page 29: Tdd with JUnit 1

getLeapYear����������� ������������������  수정

public static boolean isLeapYear(int year) { if (year % 400 == 0) return true; if (year % 100 == 0) return false; if (year % 4 == 0) return true; return false;}

Page 30: Tdd with JUnit 1

assertEquals(365+365+365+366, SubDate.getYearDay(5));

윤년을����������� ������������������  고려한����������� ������������������  테스트����������� ������������������  코드

Page 31: Tdd with JUnit 1

public static int getYearDay(int year) { int result = 0; for (int i = 1; i < year; i++) { if (isLeapYear(i)) result += 366; else result += 365; } return result;}

윤년을����������� ������������������  고려한����������� ������������������  getYearDay

Page 32: Tdd with JUnit 1

지금까지 한 것들을정리해 봅시다.