@DisplayName("올바르지 않은 RGB 색상이다.")
@ParameterizedTest
@ValueSource(strings = {"#1234567", "#12", "#GGGGGG", "red", "#dasdad"})
void isInvalidRGB(String bgColor) {
assertThat(BackgroundColorValidator.isRGB(bgColor)).isFalse();
}
위와 같은 배경 색깔 테스트에서 "#1234567", "#12" 이 두 값이 테스트 실패, 즉 색깔로 정상적으로 변환되는 오류가 발생하였다.
검증하는 메소드는 아래와 같은데,
public class BackgroundColorValidator {
public static boolean isRGB(String bgColor) {
try {
Color color = Color.decode(bgColor);
return color.getAlpha() == 255; // RGB 색상인 경우, 알파 값은 항상 255
} catch (NumberFormatException e) {
// 변환 중 예외 발생 시 유효하지 않음
return false;
}
}
}
당연히 #12와 같은 값이 들어오면 NumberFormatException이 발생할 줄 알았지만,
#12와 같은 단일 문자열을 처리할 때 예외를 발생시키지 않고, 그냥 0을 반환하여 검정색으로 변환된 것이다
따라서 아래와 같은 정규표현식으로 검사를 하는 로직을 추가하여 해결하였다. 👍🏻 테스트의 중요성 … 😉
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$