# mediaSourceCopier가 copy 과정에서 문제가 발생한 경우 그걸 검증하는 테스트 코드 작성
# transcodingService.transcode()메서드가 Exception을 발생시키도록 mediaSourceCopier.copy() 호출시 Exception을 발생하도록 한다.
# Job과 JobRepository를 추가하며, jobRepository를 필드로 만들고 JobRepository 인터페이스를 생성하고 Job클래스도 함께 생성한다.
# Job객체에 어떤한 값도 설정하지 않았기 때문에 테스트 fail 발생
# JobRepository에 Mock객체를 할당하고 테스트를 진행한다.
# transcoderFailBecauseExceptionOccredAtMediaSourceCopier 테스트를 돌려보면 assertFalse(job.isSuccess()); 확인하는 코드가 통과 되었기 때문에 transcodeSuccessfully() 테스트에 검증코드를 추가한다.
# 실패지점은 총 3개
1. transcodeSuccessfully() 메서드의 실패지점
- assertTrue(job.isSuccess())
- 아직 assertEquals(Job.State.COMPLETED, job.getLastState())는 확인도 하지 못했다.
2. transcodeFailBecauseExceptionOccuredAtMediaSourceCopier() 메서드의 실패지점
- assertEquals(Job.State.MEDIASOURCECOPYING, job.getLaststate());
# job의 상태를 변경해주는 jobStateChanger 협업객체 추가
# Job 상세 메소드 구현
# Job상태를 변경시켜주는 interface추가
# JobStateChanger의 Mock객체가 알맞게 Job의 상태를 변경시키도록 소스 추가
- 작업 시작전 / 진행 중 /끝남 여부
- 작업의 성공 / 실패 여부
만약 실패 했다면, 어느 단계에서 실패했는지 그리고 실패 원인
# transcodeSuccessfully() 테스트가 통과될때 까지 Job클래스 수정을 반복
# job.isFinished() 통과 실패
- job.isFinished는 작업이 성공하거나 또는 Exception이 발생한 경우 true를 반환하도록 구현되어 있다. 따라서, 필요한 것은 TranscodingServiceImple이 처리 도중 Exception이 발생하면 그 사실을 Job객체에 알려주는 것을 구현해야한다.
# enum 위치 변경
# transcodingExceptionHanler라는 새로운 협업 객체 등장
이 객체의 notifyToJob() 메서드는 Job객체에게 익셉션이 발생했다는 사실을 알린다. 그리고 익셉션이 사라지지 않도록 재전파한다.
# Exception 발생을 Job객체에 알리는 새로운 협업 객체 생성
# 생성자를 통해 새로 생성된 협업 객체를 할당한다.
# TranscodingServiceImple 생성자가 수정되었으니 테스트에서 사용하는 소스코드 또한 수정
# 추가된 협업객체을 이용해 테스트를 통과시켜보자.
- Mock객체인 transcodingExceptionHandler의 notifyToJob() 메서드가 호출되면 mockJob객체에 발생한 Exception을 전달할 수 있도록 exceptionOccurred() 메서드를 호출한다.