✔️ 단위 테스트(Unit Test)란?
단위 테스트는 응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트이다. 단위의 크기가 작을수록 단위의 복잡성이 낮아지므로 동작을 표현하기 더 쉬워진다. 단위테스트의 장점은 다음과 같다.
1. 제품의 안정성을 높여준다.
2. 기능의 추가 및 수정으로 인한 부작용을 줄일 수 있다.
3. 불안감 없이 코드 작성을 할 수 있도록 도와준다.
4. 디버깅을 쉽게 해준다.
5. 개발 과정에서 반복적인 작업들을 하지 않도록 도와준다.
6. 더 깔끔하고 재사용성이 좋은 코드 작성을 가능하게 해준다.
✔️ 단위 테스트 작성 방법
단위테스트를 작성하려면 먼저 테스트 코드를 작성하기 쉬운 메서드의 형태를 만들어야 한다. 단위 테스트를 구현하기 쉽게 하려면 메서드를 어떻게 구현을 해야할까?
https://tecoble.techcourse.co.kr/post/2020-05-07-appropriate_method_for_test_by_parameter/
다음 블로그를 통해 정답을 찾을 수 있었다. "메서드 시그니처를 수정하여 테스트하기 좋은 메서드로 만들기"
아래 코드는 블로그에서 예시로 작성된 코드이다.
public class Train {
private static final int MOVABLE_LOWER_BOUND = 4;
private static final int RANDOM_NUMBER_UPPER_BOUND = 10;
private final String name;
private int position;
public Train(String name, int position) {
this.name = name;
this.position = position;
}
public void move() {
final int number = random.nextInt(RANDOM_NUMBER_UPPER_BOUND);
if (number >= MOVABLE_LOWER_BOUND) {
position++;
}
}
}
아래 코드는 기존의 move 메서드에서 매개변수로 number를 받도록 수정한 코드이다. 이런식으로 코드를 수정하면 number를 외부에서 주입받기 때문에 여러 number의 값에 따라 move 메서드가 어떻게 동작하는지 테스트 코드를 통해 쉽게 확인할 수 있다.
public class Train {
private static final int MOVABLE_LOWER_BOUND = 4;
private static final int RANDOM_NUMBER_UPPER_BOUND = 10;
private final String name;
private int position;
public Train(String name, int position) {
this.name = name;
this.position = position;
}
public void move(int number) {
if (number >= MOVABLE_LOWER_BOUND) {
position++;
}
}
}
수정된 메서드를 이용해 다음과 같이 2가지 방법으로 테스트 코드를 작성할 수 있다.
public class TrainTest {
@DisplayName("숫자가 4보다 작으면 위치를 그대로 유지")
@Test
public void move_NumberIsLessThanFour_KeepPosition() {
// Given
final Train train = new Train("test", 1);
// When
train.move(3);
// Then
assertThat(train).extracting("position").isEqualTo(1);
}
@DisplayName("숫자가 4보다 크거나 같으면 위치를 1 증가")
@Test
public void move_NumberIsEqualOrGreaterThanFour_IncreasePositionByOne() {
// Given
final Train train = new Train("test", 1);
// When
train.move(4);
// Then
assertThat(train).extracting("position").isEqualTo(2);
}
}
✔️ 좋은 단위 테스트를 위한 FIRST 법칙
1. Fast
- 단위테스트는 빨라야 한다.
2. Independent
- 테스트는 독립적으로 동작해야 한다.
- 이전 테스트에 영향을 받으면 실패 원인을 찾기 어렵다.
3. Repeatable
- 어떤 상황에서든 예상한 대로 테스트 결과가 나와야한다.
4. Self-Validating
- 출력 혹은 로그가 아닌 테스트 자체적으로 결과가 나와야한다.
5. Timely
- 적시에 테스트를 철저하게 작성해야 한다.
✔️ TDD란?
TDD란 테스트 주도 개발(Test-Driven Development)이다. 즉, 선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의 프로그래밍 방법이다. TDD의 장점은 다음과 같다.
1. 테스트 커버리지가 높아진다.
- 테스트 커버리지 : 시스템 및 소프트웨어에 대해 충분히 테스트가 되었는지를 나타내는 정도
2. 오버 엔지니어링을 방지해준다.
3. 설계에 대한 피드백이 빠르다.
위 내용은 다음 블로그와 영상을 참고하였습니다.
https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/
https://www.youtube.com/watch?v=3LMmPXoGI9Q
https://www.youtube.com/watch?v=mIO4Rbe_M74
'⚙️ Backend' 카테고리의 다른 글
[PostgreSQL] PostgreSQL&pgAdmin 설치 및 Spring 연결(for Mac) (0) | 2024.08.01 |
---|---|
[Back-end] DTO vs VO vs Entity (0) | 2023.11.09 |