티스토리 뷰
TDD와 단위테스트는 다르다.
단위테스트로 먼저 연습하고 TDD에 점차 익숙해지자.
추천서적
Unit Test (단위 테스트)
■ Production code
■ Test code => JUnit
Annotation을 활용
JUnit 5.x
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
Calculator cal;
@BeforeEach
public void setUp() {
cal = new Calculator();
}
@Test
public void 덧셈() {
assertEquals(7, cal.add(3, 4));
}
{...}
@AfterEach
public void tearDown() {
cal = null;
}
}
JUnit 4.x
public class CalculatorTest {
@Before
public void setup() {
System.out.println("setup");
}
@Test
public void test1() throws Exception {
System.out.println("test1");
}
{...}
@After
public void teardown() {
System.out.println("teardown");
}
}
-
테스트 코드도 코드다. 중복 제거
-
테스트코드의 클래스명 convention은 "productioncode+Test"
-
테스트 코드의 메소드명은 함께 일하는 동료들이 모두 한국인이라면 한글도 허용되는 분위기
-
모든 테스트케이스(@Test)는 의존성을 갖지 않도록, 독립적으로 설계
-
기본적으로 테스트 해야할 대상들 : if문, 경계값, 부등호 등
-
given-when-then 방식은 무조건 사용하지말고, 테스트코드가 복잡할때만
-
UI 즉, IO와 관련한 로직은 테스트하기 어렵다. 핵심로직 위주로 테스트
IO, Random, 날짜관련, DB, 외부API 등과 관련된 부분들도 테스트하기 어렵다. -
테스트 가능한 코드와 테스트하기 힘든 부분을 분리
public class Car { private static final int FORWARD_NUM = 4; private int position; [...] public void move() { if (getRandomNo() >= 4) this.position++; } public int getRandomNo() { Random random = new Random(); return random.nextInt(10); } }
위의 코드는 Random때문에 단위테스트하기 힘들다. 아래와 같이 리팩토링해
테스트 가능한 부분과 힘든 부분을 분리하자.public void move(int number) { if (number >= FORWARD_NUM) { position++; } }
TDD (Test Driven Development, 테스트 주도 개발)
TDD = TFD(Test First Dev) + Refactoring
대표 그림
- 가볍게 다룰수있는 주제가 아니다. 하나의 철학같은 느낌. 검색해서 다른 자료들을 찾아보고 그 의미와 가치를 이해해보자.
- 처음엔 막막할것. Out->In 방식으로 접근
TDD 참고자료
'General, Java' 카테고리의 다른 글
Apache Library - StringUtils Class (0) | 2019.09.14 |
---|---|
용어정리 - DTO vs VO / DAO / POJO (0) | 2019.09.14 |
Java) package, class/instance (0) | 2019.09.14 |
Java) enum을 활용해 if문 없애기 (with Calculator 예제) (0) | 2019.09.14 |
Java Project에서 main()의 위치에 대해 (0) | 2019.09.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- webhacking.kr
- Data Structure
- 회고
- bfs
- Stack
- Android Studio
- dfs
- 해외여행
- 프로그래머스
- sort
- javascript
- mysql
- C
- 리버싱
- git
- Android
- Java
- OneToMany
- queue
- reversing
- graph
- socket
- 개발자
- Algorithm
- Vo
- FRAGMENT
- 우아한 테크코스
- 웹해킹
- brute-force
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함