728x90
https://edu.nextstep.camp/c/9WPRB0ys
NEXTSTEP에서 자바 플레이그라운드 with TDD, 클린코드라는 과제형(?) 강의를 시작했다
단계별로 과제를 풀며 공부하는 방식이라 이론보다는 실제 코드로 습득할 수 있기에 나에게 더 잘 맞을 것 같아서 신청하게 되었다
TDD, BDD는 나름대로 혼자 공부하면서 회사 업무에 적용해보려고 했지만 쉽지않았던 주제였기에 이번 강의가 굉장히 많은 도움이 많이 될 것 같은 느낌이 든다
요구사항 1
"1,2"을 ,로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다.
"1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다.
@Test
void requirementCase1() {
/* "1,2"을 ,로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다. */
String splitExampleString = "1,2";
String[] splitExampleStringArray = splitExampleString.split(",");
assertThat(splitExampleStringArray).contains("1"); // 포함 여부 확인
assertThat(splitExampleStringArray).containsExactly("1","2"); // 순서를 포함해서 정확히 일치
/* "1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다. */
splitExampleString = "1";
splitExampleStringArray = splitExampleString.split(",");
assertThat(splitExampleStringArray).contains("1"); // 포함 여부 확인
assertThat(splitExampleStringArray).containsExactly("1"); // 순서를 포함해서 정확히 일치
}
요구사항 2
"(1,2)" 값이 주어졌을 때 String의 substring() 메소드를 활용해 ()을 제거하고 "1,2"를 반환하도록 구현한다.
@Test
void requirementCase2() {
/* "(1,2)" 값이 주어졌을 때 String의 substring() 메소드를 활용해 ()을 제거하고 "1,2"를 반환하도록 구현한다. */
String resultString = "1,2";
String splitExampleString = "(1,2)";
splitExampleString = splitExampleString.substring(1,splitExampleString.length()-1);
assertThat(splitExampleString).isEqualTo(resultString);
}
요구사항 3
"abc" 값이 주어졌을 때 String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져오는 학습 테스트를 구현한다.
String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져올 때 위치 값을 벗어나면 StringIndexOutOfBoundsException이 발생하는 부분에 대한 학습 테스트를 구현한다.
JUnit의 @DisplayName을 활용해 테스트 메소드의 의도를 드러낸다.
@DisplayName("IndexOutOfBoundsException 예외 발생 확인")
@Test
void requirementCase3() {
/* "abc" 값이 주어졌을 때 String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져오는 학습 테스트를 구현한다.
String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져올 때 위치 값을 벗어나면 StringIndexOutOfBoundsException이 발생하는 부분에 대한 학습 테스트를 구현한다.
JUnit의 @DisplayName을 활용해 테스트 메소드의 의도를 드러낸다. */
/* Error Message: String index out of range: 3 */
String exampleString = "abc";
int index = 3;
/* hasMessageContaining: 포함된 문자 여부 확인 */
assertThatThrownBy(() -> {
exampleString.charAt(index);
}).isInstanceOf(IndexOutOfBoundsException.class).hasMessageContaining("index out of range");
/* 다른 표현 방식 */
assertThatThrownBy(() -> {
exampleString.charAt(index);
}).isInstanceOf(IndexOutOfBoundsException.class).hasMessageContaining("%d", index);
/* withMessageMatching: 모든 문자 일치 여부 확인 */
assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> {
exampleString.charAt(index);
}).withMessageMatching("String index out of range: 3");
/* 다른 표현 방식 */
assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> {
exampleString.charAt(index);
}).withMessageMatching("String index out of range: \\d");
/* TODO 다른 방법으로 예외 문구 변경 처리 가능한지 확인 필요 */
assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> {
try {
exampleString.charAt(index);
}catch (Exception e){
throw new IndexOutOfBoundsException("Index: " + (exampleString.length()-1) + ", Size: " + exampleString.length());
}
}).withMessageMatching("Index: \\d+, Size: \\d+");
}
728x90
'개발 교육 > 플레이그라운드 with TDD, 클린코드' 카테고리의 다른 글
TDD/리팩토링 실습 - 문자열 덧셈 계산기 (0) | 2022.03.09 |
---|---|
숫자야구게임 다시 구현 - 피드백 적용 후 (0) | 2022.03.06 |
숫자야구게임 구현 - 피드백 적용 전 (0) | 2022.03.06 |
단위 테스트 실습 - 문자열 계산기 (0) | 2022.03.02 |
AssertJ 맛보기(2) (0) | 2022.03.01 |