• Unit Test 추가 및 일부 기능 TDD 기반 구현
    • Unit Test
      • Post API, Auth API에 Unit Test를 추가
      • Controller → Service → Repository 순으로 테스트케이스를 추가
    • TDD
      • Post Update의 경우엔 TDD 기반으로 구현 시도

        TDD - 게시글 Description Update

        • API의 URL 입력 부터 시작하여 Controller를 먼저 테스트 삼각 측량으로 복잡한 로직 발생시 서비스를 mocking하여 결과 반환
        • mocking한 서비스를 테스트. 실제 데이터가 변경되는 경우를 테스트하기 위해 레포지토리를 mocking하여 결과 반환
        • mocking한 repository를 테스트
    • Issue
      • JWT의 expired를 테스트할 때 현재 시간을 반환하는 new Date()를 mocking해야 했음
        • 시간이 지남을 표현하기 위해 new Date()의 결과를 expired duration 만큼 더해 반환해야했음

        • new Date() 내부에서 호출되는 static 함수 System.currentMilliseconds()를 mocking하려 했으나, System 클래스의 경우 mockito에서 자체적으로 mocking할 수 없게 막아둔 상태

          Enable mocking static methods in Mockito · Issue #1013 · mockito/mockito

        • Instant라는 다른 클래스를 통해 현재 시간의 millisecond를 구할 수 있었고, 기존에 token validate를 위해 사용된 new Date() 부분을 Instant.now()로 교체

        • 이후 Instant.now()를 mocking하여 validate 테스트 완료

      • repository save 테스트에서 NPE 발생
        • NPE로 fail 발생하는 테스트를 별개로 실행했을 땐 문제가 없었으나, 통합 테스트 진행시 문제가 발생했음
        • 디버깅해보니 각 entity의 create_at을 위해 사용한 auditing 과정에서 문제 발생
          • 내부에서 Instant.now()를 사용
        • 오류가 나는 repository test의 경우 모두 token validate test 이후에 실행됨
        • Instant.class를 mockStatic으로 사용한뒤 close()를 해주지 않아 발생하는 문제
        • 관련 테스트에서 Instant.class mocking사용 이후 close()를 해주어 문제 해결