테스트
- 그동안의 테스트는 내가 만든 코드를 검증하기 위해서 작성해왔음
학습 테스트(Learning Test)
- 직접 만들지 않은 코드, 라이브러리, 레거시 시스템에 대한 테스트
- 우리가 이용은 하지만 통제할 수 없는, 우리가 직접 만들지 않아서 어떻게 동작하는지 확신을 가질 수 없는 시스템에 대한 테스트
- 테스트 대상의 사용방법을 익히고 동작방식을 확인하는데 유용
- 클라이언트에 수동 테스트를 만들었던 것과 비슷
- 외부 기술, 서비스가 버전이 올라갔을 때 이전과 동일하게 동작하는지 확인 할 수 있음
PaymentServiceTest
아직 PaymentServiceTest
에는 문제점이 남아있음
⇒ 시간을 정확하게 계산 했는지, 정말 계산이 정확하게 됐는지 검증하지 못했음
Clock
: 코드 안에서 시간을 계산할 때 이 시계를 기준으로 시간 계산해주는 것을 세팅할 때 사용
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/b5911b46-1646-4280-ae1d-8abe4d2399e8/image.png)
- 테스트에서 정확하게 테스트 목적으로 시계를 조작할 수 있어서 유용함
Fixed Clock
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/26ca4eae-adda-467f-91f3-03ecafe160ca/image.png)
- 시간을 세팅한 뒤, 배터리를 빼버림 → 현재 시간을 물어보면 이 시간으로 대답해 줄 것을 시키는 것
⇒ 테스트에서 편리하게 사용 됨
Clock
도 결국 오브젝트이므로 PaymentService
가 의존하는 다른 스프링의 빈으로 만들 수 있음