3. 숨어있는 숫자의 덧셈

* 코드 작성 전 테스트 조건
- my_string의 원소?들이 숫자인지 확인
- my_string의 총 길이가 1과 1000 사이가 아니라면 예외처리
- 숫자들의 합이 일치하는지 확인 ✔️ (생각하지 못했던 부분, 입력값과 출력값을 고려했다면 당연히 했어야 할 테스트!)
* 작성 코드
package jh.day0925;
public class StringCalculator {
public int plusNumber(String my_string) {
if(my_string.isEmpty() || my_string.length() > 1000) {
throw new IllegalArgumentException("문자의 길이는 1이상 1000이하");
} // end if
boolean containsUpperCase = my_string.matches(".*[A-Z]+.*");
boolean containsLowerCase = my_string.matches(".*[a-z]+.*");
boolean containsNumber = my_string.matches(".*[0-9]+.*");
if(!containsUpperCase || !containsLowerCase || !containsNumber) {
throw new IllegalArgumentException("문자는 대문자, 소문자, 한자리 자연수로 구성되어야 합니다.");
} // end if
int answer = 0;
char[] chars = my_string.toCharArray();
for (char ch : chars) {
if (Character.isDigit(ch)) {
answer += Integer.parseInt(String.valueOf(ch));
} // end if
} // end for
return answer;
} // stringCalculator
} // class
* 테스트 코드
package jh.day0925;
import org.junit.jupiter.api.BeforeEach;
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;
@DisplayName("숨어있는 숫자의 덧셈 테스트")
public class StringCalculatorTest {
private StringCalculator stringCalculator;
@BeforeEach
void createInstance() {
stringCalculator = new StringCalculator();
} // createInstance
@Test
@DisplayName("파라미터의 길이 확인")
void testLength() {
assertThatThrownBy(() -> stringCalculator.plusNumber(""))
.isInstanceOf(IllegalArgumentException.class);
} // testLength
@Test
@DisplayName("합이 맞는지 확인")
void testSum() {
assertThat(stringCalculator.plusNumber("aAb1B2cC34oOp")).isEqualTo(10);
} // testSum
@Test
@DisplayName("소문자, 대문자, 한자리 자연수 확인")
void testParam() {
assertThatThrownBy(() -> stringCalculator.plusNumber("aB"))
.isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> stringCalculator.plusNumber("ab1"))
.isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> stringCalculator.plusNumber("1AB"))
.isInstanceOf(IllegalArgumentException.class);
assertThatThrownBy(() -> stringCalculator.plusNumber("+*"))
.isInstanceOf(IllegalArgumentException.class);
} // testParam
} // class
매개변수의 길이와 매개변수가 소문자, 대문자, 한자리 자연수를 포함하고 있는지 확인하는 것을 조건문으로만 확인.
따로 method로 빼서 코드를 작성해야 했을까?
하지만 테스트를 통과하기 위한 코드를 작성해야 한다면 이번 문제에서는 매개변수의 길이와 소문자, 대문자, 한자리 자연수를 포함하고 있는지는 예외처리 되어야 하기 때문에 조건문으로 예외만 던져주어도 되지 않을까 생각한다.
728x90
'study > JUnit' 카테고리의 다른 글
| [sailor-moon] 2024.09.27_JUnit : 가위바위보 입력 테스트 (5) | 2024.09.29 |
|---|---|
| [sailor-moon] 2024.09.26_JUnit : 부분 문자열인지 확인하기 (4) | 2024.09.26 |
| [sailor-moon] 2024.09.24_JUnit : 각도기, 숫자 비교 (3) | 2024.09.24 |
| [sailor-moon] 2024.09.23_JUnit : JUnit 기본 활용 (1) | 2024.09.23 |