티스토리 뷰
[ TDD의 주문 ]
TDD의 주문 = 빨강/초록/리팩토링
1. 빨강 - 실패하는 작은 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다
2. 초록 - 빨리 테스트가 통과하게끔 만든다. 이를 위해 어떤 죄악을 저질러도 좋다
(죄악이란 기존 코드 복사해서 붙이기, 테스트만 간신히 통과할 수 있게끔 함수가 무조건 특정 상수를 반환하도록 구현하기 등을 의미한다)
3. 리팩토링 - 일단 테스트를 통과하게만 하는 와중에 생겨난 모든 중복을 제거한다
[ 예제 ]
1. 정말 리얼 말그대로 테스트를 가장 먼저 작성한다
public void testMultiplication() {
Dollar five = new Dollar(5);
five.times(2);
assertEquals(10, five.amount);
}
2. 당연히 컴파일 에러가 난다
- Dollar 클래스가 없음
- 생성자가 없음
- times(int) 메서드가 없음
- amount 필드가 없음
위의 4가지의 컴파일 에러가 있는데, 이것을 하나씩 정복한다
- Dollar 클래스 만들고
- 생성자 만들고
- times(int) 메소드 만들고
- amount 필드를 추가한다
컴파일만 될 수 있는 아주 최소한의 구현만으로...!!!
3. 그리고 하나씩 제대로 동작하게 만든다 ('작동하는 코드' 먼저)
4. 마지막으로 깔끔한 코드로 만든다 ('깔끔한 코드' 는 그 다음에)
[ 그외 ]
<UI 구현도 TDD로>
하나하나 테스트를 작성하며 컨트롤을 붙여나가고,
컨트롤 간의 상호 작용에 대해서 역시 테스트를 작성하고 구현하며 리팩토링하는 리듬을 계속 유지할 수 있다
예를 들어보자
필요한 View를 만들 때 일단 테스트 코드를 작성한다
public void testPresentation() {
VendingMachinePanel vmp;
vmp = new VendingMachinePanel();
assertNotNull(vmp.moneyPanel);
assertNotNull(vmp.tackbackPanel);
assertNotNull(vmp.buttonTakeBack);
assertNotNull(vmp.buttonInsertMoney);
}
테스트가 통과하도록 구현한다
public class VendingMachinePanel extends JFrame {
public JTextField moneyPanel = new JTextField();
public JTextField tackbackPanel = new JTextField();
public JTextField buttonTakeBack = new JTextField();
public JTextField buttonInsertMoney = new JTextField();
}
<뷰-모델 간 상호작용도>
public void testInsertMoney() {
VendingMachinePanel vmp = new VendingMachinePanel();
VendingMachine vn = new VendingMachine();
vmp.setVendingMachine(vm);
int money = 500;
vmp.moneyPanel.setText(new Integer(money).toString());
vmp.buttonInsertMoney.doClick();
assertEquals(money, vm.getCurrentMoney())
}
이런식으로 테스트를 먼저 짠다음에 테스트를 통과하도록 구현한다
'책도 읽고' 카테고리의 다른 글
오브젝트 (1) - 좋은 설계란? / 데이터 주도 설계 vs 책임 주도 설계 (0) | 2021.02.19 |
---|---|
클린 애자일 / 카이젠 저니 (0) | 2021.02.05 |
개발자의 글쓰기 - 김철수 (0) | 2020.12.24 |
클린 코드 (Clean Code) (2) | 2019.05.08 |
함께 자라기 - 애자일로 가는 길 (0) | 2019.03.20 |
- Total
- Today
- Yesterday
- Watch App for iOS App vs Watch App
- flutter dynamic link
- Dart Factory
- flutter deep link
- 구글 Geocoding API
- flutter 앱 출시
- flutter build mode
- Flutter Spacer
- 플러터 싱글톤
- Flutter Text Gradient
- PencilKit
- ribs
- drf custom error
- DRF APIException
- Flutter 로딩
- Flutter getter setter
- SerializerMethodField
- Django FCM
- 장고 Custom Management Command
- Django Firebase Cloud Messaging
- cocoapod
- 장고 URL querystring
- Flutter Clipboard
- github actions
- ipad multitasking
- METAL
- 플러터 얼럿
- Django Heroku Scheduler
- Python Type Hint
- Sketch 누끼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |