기능을 모두 구현하고 난 이후에는
Application Test 이외에 TDD를 몇가지 테스트하며
구현한 함수가 제대로 작동하는지 테스트해보았다.
TDD에 아직 익숙하지 않은 만큼
먼저 다음 링크의 블로그를 통해 Junit test code 작성법을 익혔다.
=> 참고한 링크들
https://velog.io/@jkijki12/Java-TDD
=> 다음으로 test/study 파일을 통해 각 의미를 공부해보았다.
1. contains/ containsExcatly
@Test
void split_메서드로_주어진_값을_구분() {
String input = "1,2";
String[] result = input.split(",");
assertThat(result).contains("2", "1");
assertThat(result).containsExactly("1", "2");
}
.contains() 결과값이 이 값들을 포함하는지 확인
.containsExactly() : 순서를 포함해서 일치하는지 확인
참고
:https://bcp0109.tistory.com/317
2. asserThat().isEqualTo()
@Test
void substring_메서드로_특정_구간_값을_반환() {
String input = "(1,2)";
String result = input.substring(1, 4);
assertThat(result).isEqualTo("1,2");
}
.isEqualTo() : 결과값이 같은지 확인할 때
3. 이 값을 던졌을 때 예외값이 출력되는지
assertThatThrwonBy()
.isInstanceOf()
@Test
void charAt_메서드_사용시_문자열의_길이보다_큰_숫자_위치의_문자를_찾을_때_예외_발생() {
String input = "abc";
assertThatThrownBy(() -> input.charAt(5))
.isInstanceOf(StringIndexOutOfBoundsException.class)
.hasMessageContaining("String index out of range: 5");
}
=> 이 코드에서는 길이가 3인 input("abc")에서
=> charAt(5)를 입력했을 때 StringIndexOutofBOundsException 오류가 나오는지 확인
=> 그 오류에는 String index out of Index가 포함되어 있는지 확인
>> 구현한 TDD
1) 자동차 객체가 제대로 초기화되는지
@Test
void Car객체_초기화(){
Car car=new Car("geonwoo");
assertEquals(car.getName(), "geonwoo");
assertEquals(car.getPosition(),0);
}
=> 멤버함수가 geonwoo로 초기화되고
=> position에는 0이 초기화되는지 확인
2) 자동차 이름 input 값의 예외상황들 test
- 쉼표로 끝날때
- 입력값이 없을 때
- 중복된 입력값이 있을때
- 5글자보다 긴 입력값이 있을 때
- 빈 입력값이 있을 때
- 형식이 잘못된 이름이 있을때
@Test
void End_Delimiter_Test() {
assertThrows(IllegalArgumentException.class, ()-> {
NameValidiator check = new NameValidiator("java,");
});
}
@Test
void Blank_Test() {
assertThrows(IllegalArgumentException.class, ()-> {
NameValidiator check = new NameValidiator("");
});
}
@Test
void check_Duplicate() {
assertThrows(IllegalArgumentException.class, ()-> {
InputNames check = new InputNames();
check.ParsingInput("java,java");
});
}
@Test
void check_Long_Names() {
assertThrows(IllegalArgumentException.class, ()-> {
InputNames check = new InputNames();
check.ParsingInput("javaji,java");
});
}
@Test
void check_Empty_Names() {
assertThrows(IllegalArgumentException.class, ()-> {
InputNames check = new InputNames();
check.ParsingInput("j,,java");
});
}
@Test
void check_Wrong_Names() {
assertThrows(IllegalArgumentException.class, ()-> {
InputNames check = new InputNames();
check.ParsingInput("#,#");
});
}
=> 각 상황에서 IllegalArgumentException을 발생시키는지 확인
3) 턴수 input 값의 예외상황들 test
- 입력값이 숫자가 아닐때 : "a"
- 입력값이 적법한 형식이 아닐때 : "123,"
- 입력값이 0일 때
- 입력값이 음수일 때
@Test
void check_Not_Number1() {
assertThrows(IllegalArgumentException.class, ()-> {
InputTurn check = new InputTurn();
check.inputToInt("a");
});
}
@Test
void check_Not_Number2() {
assertThrows(IllegalArgumentException.class, ()-> {
InputTurn check = new InputTurn();
check.inputToInt("123,");
});
}
@Test
void check_Zero() {
assertThrows(IllegalArgumentException.class, ()-> {
InputTurn check = new InputTurn();
check.inputToInt("0");
});
}
@Test
void check_Negative_Number() {
assertThrows(IllegalArgumentException.class, ()-> {
InputTurn check = new InputTurn();
check.inputToInt("-1");
});
}
=> 실행결과 : 다행히 모두 통과했다!!
>>느낀 점
- study 파일을 통해 TDD작성의 의의와 효과를 파악할 수 있었다.
- TDD 작성을 위한 JUnit 코드들을 학습하고 이를 입력값에 적용해보았다.
- 기능이 모두 구현되고 난후 TDD를 시행하여 private 함수를 몇개 public으로 바꾸어주어야 했다.
- 기능이 하나하나 구현될때마다 Test Case를 바로바로 작성하여 테스트하는 습관이 더 중요하다 생각했다.
=> 어디서 오류가 난지 찾는 기능이 아니라, 말 그대로 기능 자체가 잘 돌아가는지 test하는 데 의의가 있으므로
'우테코' 카테고리의 다른 글
우테코 3주차 - [로또] 요구사항 분석 + 기능구현목록 작성 (0) | 2023.11.08 |
---|---|
우테코 3주차 - 2주차 피드백 검토 (0) | 2023.11.07 |
우테코 2주차 - [자동차 경주] : 기능 구현 (0) | 2023.11.01 |
우테코 2주차 - [자동차 경주] 프로그래밍 요구사항 파악 + 구현 기능 목록 작성 (0) | 2023.11.01 |
우테코 2주차 - 1주차 공통 피드백 검토 (0) | 2023.11.01 |