오늘은 부트캠프 62일차이다. 오늘은 CI/CD에 대해 강의를 듣고, 여태까지 배웠던 CS 기초를 정리를 하는 시간을 가졌다. 최종 프로젝트 전까지 좀 더 나은 기술을 배워서 적용을 하다기보다는 알고 있는 것을 좀 더 단단하게 준비해서 프로젝트에 임하면 좋겠다라고 생각해서 복습을 하는 주가 되겠다. 만약 시간이 남는다면 redis나 kafka에 대한 내용도 공부해보면 좋겠다.
오늘 배운 것
1. 단위 테스트
- 가장 작은 단위의 테스트 방식, 메서드 단위로 테스트로 수행하고, 의도한 결과 값이 나오는지 확인하는 수준(ex: controller, service, repository 격리해서 따로따로)
2. 통합 테스트
- 어플리케이션이 정상적으로 동작하는지 확인, 여러모듈을 함께 테스트(ex: controller 메소드 호출하면 controller->servie->repository 모두 수행)
3. F.I.R.S.T 원칙
- Fast : 단위 테스트는 빨라야 한다.
- Independent : 단위 테스트는 각각의 테스가 연관되지 않고, 고립되어야 한다. 즉 독립적이어야 한다.
- Repeatable : 단위테스트는 반복 가능해야한다. 반복적으로 테스트를 시행해도, 결과는 같아야 한다.
- Self-validating : 자체적으로 테스트 결과가 도출되어야한다. (개발자가 print 찍어서 비교하는게 아니고 자동으로 수행되며 성공/실패의 결과가 나오는 것)
- Timely : 단위 테스트는 실제 코드보다 먼저 구현해야한다.(TDD일 경우에만 해당)
4. Given-When-Then 패턴
- Given : 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상화에 대한 행동을 정의한다.
- When : 실제 테스트를 하는 메소드가 호출되며 테스트를 통한 결과값을 가져온다.
- Then : When 단계에서 나온 결과값을 검증하는 작업을 수행한다.
5. JUnit + Mockito
- JUnit : Java에서 사용되는 대표적인 테스트 프레임워크
- Mockito : Mock 객체를 쉽게 만들고, 관리하고, 검증할 수 있는 방법을 제공하는 프레임워크이다. Mock 객체는 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 행동을 관리하는 객체이다.
6. Mock 객체의 의존성 주입을 위한 3가지 어노테이션
- @Mock : Mock 객체를 만들어 반환해주는 어노테이션
- @Spy : Stub하지 않은 메소드들은 원본 메소드 그대로 사용하는 어노테이션
- @InjectMocks : @Mock 또는 @Spy로 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션