23-08-03 TIL

more·2023년 8월 3일
0

문제

  • 게시글 작성 테스트
    • 게시글 작성 테스트 중에 발생한 문제가 있었다.
    • 결과값으로 문자열이 한글로 나와야 하는데 제대로 인코딩이 되지 않았는지 이상한 문자가 나오고 fail이 되었다.

시도

  • 게시글 작성 테스트

    • 처음으로 시도한 방법은 다음과 같다.

      1. 설정 > 에디터 > 파일 인코딩
        => 인코딩 부분을 전부 UTF-8로 변경
        => 프로퍼티 파일 부분에서 명확한 Native에서 ASCll로의 변환 체크
      2. idea64.exe.vmoptions 파일에 -Dfile.encoding=UTF-8 추가
      3. 도움말 > 사용자 지정 VM 옵션 편집에 -Dfile.encoding=UTF-8 추가
    • 하지만 여전히 제대로 동작하지 않았고 또 다른 방법을 찾아보아야 했다.

    • 시도한 다른 방법은 BeforeAll을 사용해서 미리 인코딩을 해주는 것이다.

      
      @BeforeAll
          public void setup() {
              this.mockMvc = MockMvcBuilders.webAppContextSetup(ctx)
                      .addFilters(new CharacterEncodingFilter("UTF-8", true))  // 필터 추가
                      .alwaysDo(print())
                      .build();
          }
      
       # test/resources/application.yml
      server:
        servlet:
          encoding:
            force-response: true
      
    • 하지만 이 방법을 사용하자 또 다른 오류가 발생하였다.

      
      org.junit.platform.commons.JUnitException: @BeforeAll method '...' must be static unless the test class is annotated with @TestInstance(Lifecycle.PER_CLASS)
      

해결

  • 게시글 작성 테스트
    • 해당 오류를 고치기 위해서 @TestInstance(Lifecycle.PER_CLASS)를 추가해주자 정상적으로 한글이 출력되는 것을 볼 수 있었다.
    • @TestInstance(Lifecycle.PER_CLASS) 를 선언한 클래스는 클래스 단위 생명주기를 가진다고 한다.
    • 따라서 테스트 클래스가 끝난뒤에 사라지기 때문에 다른 설정들과 충돌을 일으키지 않는 것으로 보인다.

참고한 사이트

profile
조금 더

0개의 댓글