23.09.26 항해 99 16기 주특기 프로젝트 10일차
오늘 공부한 것
* Test 코드 작성법
오늘은 기술매니저님께서 강조하신 Test 코드 작성법에 대해 공부해보았다
Spring 심화주차 에서도 Test 코드를 작성하는 부분이 있었는데 이걸 참고삼아서 공부했다
Test 코드에도 지켜야 할 원칙이 있었다
Fast 가능한 빠르게 실행되어야 한다. 실행함에 있어 너무 느려 테스트 실행을 꺼리게 된다면 잘못된 단위테스트이다
Independent 객체의 상태, 메소드, 이전 테스트 상태, 다른 메소드의 결과등에 의존해서는 안된다.
따라서 단위테스트는 어떠한 순서로 실행하더라도 성공해야 합니다.
Repeatable 반복 가능해야합니다. 앞서 DB에 의존하게되는 현상과 같이 여러번 실행하는 경우 실패하면 안된다
Self-validating 자체검증이 가능해야한다.
테스트를 개발자가 직접 수동으로 확인할 필요 없이, Assert문 등에 의해 성공 여부가 결과로
나타나야한다
Timely 단위테스트를 통과하는 제품코드가 작성되기 바로전에 단위테스트를 작성해야한다
TDD를 하고 있다면 적용이 되지만 그렇지 않을 수도 있습니다.
단위 테스트 애플리케이션의 개별 모듈을 독립적으로 테스트함
통합 테스트 애플리케이션을 구성하는 다양한 모듈을 결합해 전체적인 로직이 의도한 대로 동작하는지 테스트함
관련 애너테이션
@SpringBootTest 애플리케이션을 직접 구동해서 테스트를 징행하는 라이브 테스트 방법 통합테스트시 사용함
@Autowired 필요한 객체의 타입에 해당하는 빈을 찾아 주입한다
@Test 테스트 코드를 포함한 메서드
@Around 핵심기능 수행 전 과 후 (@Bebore + @After)
@Before 핵심기능 호출 전 (ex Client 의 입력값 Validation 수행)
@After 핵심기능 수행성공 / 실패 여부 상관없이 언제나 동작 (try, catch 의 finally()처럼 동작)
@AftrerReturning 핵심기능 호출 성공시 (함수의 Return 값 사용가능)
@AfterThrowing 핵심기능 호출 실패시 즉, 예외가 발생한 경우에만 동작
(ex 예외 발생시 개발자에게 email 이나 SMS 보냄)
@WebMvcTest(테스트 대상 클래스.class) 웹에서 사용되는 요청과 응답에 대한 테스트를 수행 가능
대상 클래스만 로드해 수행하고 대상 클래스를 추가하지 않으면
@controller, @RestController 등의 컨트롤러 관련 빈책체가 모두 로드됨
@SpringBootTest보다 가볍게 테스트하기 위해 사용됨
@MockBean 실제 빈 객체가 아닌 Mock(가짜) 객체를 생성해서 주입하는 역활을 수행함 이때 객체는 실제 객체가
아니기 때문에 실제 행위를 수행하지 않는다 그렇기 때문에 개발자가 Mockito 의 given()메서드를 통해
동작을 정의해야함
@DisplayName 테스트 메서드의 이름이 복잡해서 가독성이 떨어지는 경우 테스트에 대한 표현을 정의할 수 있다
이외에도 다양한 것들이 있는데 앞으로 더 공부해나가야겠다!