이번주는 로또 게임. 객체지향적으로!
문제는 예외가 발생했을 때 예외를 적절하게 처리하지 않은 것으로 보입니다. 여기서 발생한 예외는 UnsupportedOperationException이며, 이 예외는 일반적으로 Java의 불변(Immutable) 컬렉션을 수정하려고 할 때 발생합니다. 따라서 해당 예외를 처리하거나 발생하지 않도록 코드를 수정해야 합니다.
아래는 해결 방법 중 하나입니다:
불변 컬렉션 수정: Lottos 클래스의 createLottos 메서드 내에서 불변 컬렉션을 수정하려는 것으로 보입니다. 불변 컬렉션은 수정할 수 없으므로, 이를 수정하는 부분을 찾아 수정해야 합니다. 불변한 List 또는 Collections.unmodifiableList를 사용하여 수정을 방지하는 방법을 고려하십시오.
테스트 수정: 현재 ApplicationTest 클래스의 기능_테스트 메서드에서는 예외 처리를 하지 않고 예외가 발생한 경우 테스트가 실패하도록 구성되어 있습니다. 따라서 예외가 발생하더라도 [ERROR] 메시지가 출력되고 테스트는 실패합니다. 이를 고려하여 예외 처리 코드를 추가하거나 예외가 발생하지 않도록 수정한 후에 테스트 코드를 수정해야 합니다.
위의 두 가지 방법 중 하나를 선택하여 문제를 해결하십시오. 불변 컬렉션 수정을 방지하거나 테스트 코드를 수정하여 예외 처리가 올바르게 동작하도록 해야 합니다.
참고글 https://velog.io/@injoon2019/일급컬렉션의-불변객체-unmodifiable-방어적-복사
방어적 복사를 사용할 경우, 외부에서 객체를 변경해도 내부의 객체는 변경되지 않는다.
생성자에서 인자를 받으면서 new ArrayList<>()를 이용해 만든 복사본으로, 필드 를 초기화한다.
runExciption이 illegalException을 잡는 게 아니라서 오류가 그대로 발생한 것이었다. 해당 예외가 있는 부분 -> 적용되는 시작점까지 다 throw illegalException을 해주고, 맨 처음 main 부분에서 try, catch 를 하니 됐다.
+) 추가
: IllegalArgumentException은 언체크 예외이기 때문에, throws 에러를 코드에 명시하지 않아도 된다고 한다. 그냥 main에 try-catch문을 작성해주니 됐다.
[java-lotto] ApplicationTest의 예외_테스트 분해하기 #1250
본문 발췌
근데 이 테스트 메소드를 사용하면 random 숫자는 내가 지정해서 해 볼 수 있는데, 결과를 output이 아니라 중간에 result의 rate 변수값만 확인하는 방법은 없나?