-
[TDD] 테스트 주도 개발방법론Tool/TDD 2018. 9. 15. 05:38
** TDD
- 일반적인 개발 절차는 디자인, 코딩, 테스트 하는 과정이었지만, TDD는 정확한 프로그래밍 목적을 디자인 단계에서 미리 정의해야하고,
개발하는 과정에서 테스트 code를 작성하고 리팩토링 했다.
** TDD 개발 순서
- 실패하는 테스트 만들기
- 테스트를 통과할 만한 작은 코드 작성하기
- Refatore, 반복되는 코드, 긴 메소드, 긴 매개변수 목록 등등 코드를 효율적으로 바꾸기
** TDD 따라해보기
- TDD를 시작하기에 앞서 예제를 보면서 Junit 실습을 했지만 감이 잡히지 않던 와중에 도움이 될만한 영상을 보게 되었다.
(https://www.youtube.com/watch?v=16XCgvGJtzA)
** 영상 (이해하기 쉬운 예제)
1) test 폴더 < test 클래스 생성, 계좌Test.class
@Test
public void shouldHaveZeroBalanceAfterOpeningANewAccount() // 새로운 계좌 생성하면 돈이 없어야한다.
{
계좌 account = new 계좌();// 계좌 객체 생성했지만 오류 발생}
2) 계좌 객체 생성 // 1)의 오류를 없애주는 작은 코드 작성하기, Test 폴더가 아닌 src 폴더에 클래스 만들기
public class 계좌{
}
3) get잔액() 메소드가 존재하지 않기 때문에 Test 실패
@Test
public void shouldHaveZeroBalanceAfterOpeningANewAccount()
{
계좌 account = new 계좌();
double current = account.get잔액();// current에 계좌의 잔액 저장assertEquals(0, current, 0.00001);// current가 0인지 확인해주세요, 오차는 0.00001(double에서만 설정))
4) 계좌 클래스에 get잔액() 생성
public class 계좌{
private double 잔액 = 0;
public double 잔액(){
return 잔액
}
}
5) 예금 Test code 작성
@Test
public void shouldAddMoneyAfterDeposit() // 돈은 예금했을 때 계좌에 돈을 더해야한다.
{
계좌 account = new 계좌();
account.예금함(123.45);}
6) 계좌 클래스에 금액을 더하는 예금함() 생성
public void 예금함(double 금액){
this.잔액 += 금액;
}
7) Test 성공
@Test
public void shouldAddMoneyAfterDeposit()
{
계좌 account = new 계좌();
account.예금함(123.45);
double current = account.get잔액();
assertEquals(123.45, current, 0.00001);
account.예금함(200);
double current = account.get잔액();
assertEquals(323.45, current, 0.00001);
}
8) refactoring@Test
public void shouldAddMoneyAfterDeposit()
{
계좌 account = new 계좌();
account.예금함(123.45);
assertEquals(123.45, account.get잔액(), 0.00001);
account.예금함(200);
double current = account.get잔액();
assertEquals(323.45, account.get잔액(), 0.00001);
}
9) 인출 Test code 작성, 인출함()이 없어서 Test 실패
@Test
public void shouldSubtractAcountAfterWithdraw()
{
계좌 account = new 계좌();
account.예금함(100);
account.인출함(40);assertEquals(60, account.get잔액(), 0.00001);
}
10) 계좌 클래스에 금액을 빼는 인출함() 작성
public void 인출함(double 금액)
{this.잔액 -= 금액;}11) Test 성공
@Test
public void shouldSubtractAcountAfterWithdraw()
{
계좌 account = new 계좌();
account.예금함(100);
account.인출함(40);
assertEquals(60, account.get잔액(), 0.00001);
}
12) 예외를 기다리고 있지만 발생하지 않아서 Test 실패
@Test(expected = IllegalArgumentException.class) //예외 기다리고있어요 !-!
public void shouldThrowExceptionWhenThereIsNoMoney()
{
계좌 account = new 계좌();
account.예금함(100);
account.인출함(140);
// 예외 발생하지 않음
}13) 예외조건 만들어서 Test 성공
public void 인출함(double 금액)
{if(잔액 < 금액) throw new IllegalArgumentException("돈이 없어요.");this.잔액 -= 금액;}** 왜 TDD 해야해요 ?- 테스트 주도 개발하면 언제든지 코드를 바꿔도 버그를 찾을 수 있다. 기획에도 좋다.'Tool > TDD' 카테고리의 다른 글
[TDD, 리팩토링]문자열 계산기 (0) 2018.10.28 [TDD] Junit 사용법 및 단위 테스트 (0) 2018.09.13