개발일기
TDD 1단계 구현 본문
나는 이번에 TDD 공부를 강의도 사서 보고, 직접 프로젝트를 적용하면서 공부하다가 과연 이렇게 하는게 맞을까?
내가 작성하는 코드들은 왜이렇게 별로인거같지라는 생각이 끊임 없이 들었고 공부할 수록 어떤 코드가 좋은 코드인지 몰랐다.
그래서 next-step을 듣고 해당 글들을 블로그에 저장하고 두고두고 보려고 한다.
📖 StringTest
package study;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class StringTest {
@Test
@DisplayName("문자열 split 테스트")
void split() {
String[] splitResult = "1,2".split(",");
assertThat(splitResult).containsExactly("1", "2");
}
@Test
@DisplayName("문자열 substring 테스트")
void substring() {
String result = "(1,2)".substring(1, 4);
assertThat(result).isEqualTo("1,2");
}
@Test
@DisplayName("문자열 chatAt 성공 테스트")
void chatAt_success() {
assertAll(
() -> assertEquals("abc".charAt(0), 'a'),
() -> assertEquals("abc".charAt(1), 'b'),
() -> assertEquals("abc".charAt(2), 'c')
);
}
@Test
@DisplayName("문자열 chatAt 실패 테스트")
void charAt_fail() {
assertThatThrownBy(() -> "abc".charAt(3))
.isInstanceOf(IndexOutOfBoundsException.class)
.hasMessageMatching("String index out of range: \\d+");
}
}
테스트 코드를 이해하기 위해서 작성한 부분이다.
해당 코드는 테스트 코드를 작성해 본 적이 있다면 쉽게 이해가기에 설명은 없다.
📄 SetTest
package study;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import java.util.HashSet;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.*;
public class SetTest {
private Set<Integer> numbers;
@BeforeEach
void setUp() {
numbers = new HashSet<>();
numbers.add(1);
numbers.add(1);
numbers.add(2);
numbers.add(3);
}
@Test
@DisplayName("size 크기 테스트")
void size() {
assertEquals(3, numbers.size());
}
@DisplayName("contains 테스트")
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void contains(int number) {
assertTrue(numbers.contains(number));
}
@DisplayName("contains 실패 테스트")
@ParameterizedTest
@CsvSource(value = {"1:true", "2:true", "3:true", "4:false", "5:false"}, delimiter = ':')
void contains_fail(int input, boolean expected){
assertEquals(numbers.contains(input),expected);
}
}
해당 코드는 반복되는 테스트 코드 assertEquals를 @ParameterizedTest를 통해서 반복을 제거해주었다.
'TDD' 카테고리의 다른 글
감면 혜택 및 취등록세 계산 관련 테스트 코드 작성기 (0) | 2025.04.18 |
---|---|
다시 작성해보는 TDD RacingCar (0) | 2024.11.19 |
4단계 : racing car 리팩토링 (6) | 2024.10.28 |
3단계 RacingCar TDD (1) | 2024.10.07 |