본문 바로가기

개발일지/TIL

[230803] [파이널] 프로젝트 진행 (2)

테스트 코드 

✔ 테스트 코드 적용 이유

💬 CI에는 자동 테스트가 있을 때 더 빛을 발한다고 생각한다. 테스트 코드는 합칠 때 작성한 코드들이 문제가 없음을 보여줄 수 있는 근거이기 때문이다. 팀원들과 논의를 거쳐 이러한 이점을 위해 각 기능을 구현할 때 비즈니스 로직은 테스트 코드를 작성하기로 했다.

 

✔ 테스트 코드 이점

💬 테스트 코드는 비즈니스 로직을 짤 때 가장 이점이 많은 것 같다. 중요한 로직에서 발생할 수 있는 버그를 사전에 예방할 수 있다. 코드에서 빼먹은 로직을 확인하고 보충할 수도 있다. 

 

✔ Mock의 사용

💬 실제로 테스트 코드를 짜다 보니 Service에 들어가는 비즈니스 로직에는 DB 통신 부분이 대부분 들어간다는 것을 알았다. 통신 부분을 그대로 유지한 체 테스트를 한다면 우리가 짜놓은 비즈니스 로직은 DB 서버 이상에 의해서도 에러를 내뱉을 수도 있다. 그래서 DB 통신 부분을 대체하기 위해 Mock은 단위 테스트를 하는 데에 있어 사용되어야 한다고 생각한다. 

 

✔ Mock 적용 방법

1. Junit5은 Class에 어노테이션을 붙여줘야 한다.
    ➡ @ExtendWith(MockitoExtension.class)
2. Mock으로 만들려는 객체에 어노테이션을 붙여줘야 한다.
    ➡ @Test      

 

✔ Mock 이슈

💢 Mock 객체가 초기화되지 않고 null이 발생하는 문제

✅ Mock 어노테이션을 통해 생성되는 객체는 Test 어노테이션이 선언된 메서드 안에서 실행이 되어야 초기화가 된다.
    ➡ @Test 
         void test() {
             Mock 객체 사용
          }

💢 Mokito에서 제공하는 any()가 에러를 발생시키는 문제

✅ Mokito에서 제공하는 any(), anyLong() 등은 Mock 객체에서만 사용이 가능하다. 일반 객체에서 사용할 경우 에러가 발생