멘질멘질] 2023 졸업 프로젝트

Junit5] 테스트에서 *.properties 정보 읽어오지 못하는 경우 해결 방법

2023. 6. 13. 00:13
목차
  1. 문제 상황
  2. 내가 생각하는 문제의 원인
  3. 해결 방법 1
  4. 해결 방법 2
반응형

테스트를 상위 패키지인 domain 혹은 그 위의 패키지에서 한 번에 모든 클래스들을 실행하면 테스트가 모두 성공하지만, UserControllerTest를 단독으로 실행하면 오류 발생.
./gradlew build 명령 수행 시 마찬가지로 오류가 발생하며, 이로 인해 GitHub Action에서 오류가 발생한다. 

 

문제 상황

  • UserControllerTest 코드 중 일부. 
  • common > JwtUtils에 있는 메소드 중 하나인 getJwtSecretKey()의 값을 읽어오지 못하여서 발생하는 오류였다.
  • getJwtSecretKey 메서드를 static으로 선언하였음에도 불구하고, 해결이 되지 않았다. 
@BeforeEach
public void initGenerateJwtData() {
    Key key = getJwtSecretKey();	// 실질적인 오류가 발생하는 부분. 값을 불러오지 못한다.
    Date now = new Date();
    long expireTime = Duration.ofDays(360).toMillis();    

    // Set header
    Map<String, Object> header = new HashMap<>();
    header.put("typ", "JWT");
    header.put("alg", "HS512");

    // Set payload A
    Map<String, Object> payloadA = new HashMap<>();
    payloadA.put("id", "test_A");
    payloadA.put("email", "userControllerTestA@gmail.com");
    payloadA.put("name", "testJwtUserA");
    payloadA.put("provider", "google");
    jwtDataA = Jwts.builder()
            .setHeader(header)
            .setClaims(payloadA)
            .setSubject("UserControllerTest")
            .setIssuedAt(now)   
            .setExpiration(new Date(now.getTime() + expireTime))
            .signWith(key, SignatureAlgorithm.HS512) // 이 부분에서 java.lang.IllegalArgumentException: Key argument cannot be null. 오류 발생함
            .compact();
}

 

내가 생각하는 문제의 원인

UserControllerTest는 현재 @WebMvcTest로, @SpringBootTest가 아니기 때문에 getJwtSecretKey() static method를 가진 JwtUtils class가 생성되지 않아서 오류가 발생하는 것으로 보인다.

 

 

 

해결 방법 1

  • @TestPropertySource, Environment 사용
@WebMvcTest(controllers = UserController.class, ...
@TestPropertySource(locations = "classpath:application-jwt.properties") // 추가
class UserControllerTest {
     // ....
    @Autowired
    private Environment env; // 추가

    @BeforeEach
    public void initGenerateJwtData() {
        // import application-jwt.properties
        String jwtSecret = env.getProperty("jwt.secret");

        // encode
        byte[] keyBytes = Decoders.BASE64.decode(jwtSecret);
        SecretKey JWT_SECRET_KEY = Keys.hmacShaKeyFor(keyBytes);

        Date now = new Date();
        long expireTime = Duration.ofDays(360).toMillis();    // 만료날짜 360일 이후.

        // Set header
        // 위와 동일 
       // ....

 

 

해결 방법 2

  • 직접 application-jwt.properties 파일을 읽어온다.
Properties properties = new Properties();
InputStream inputStream = JwtUtils.class.getClassLoader().getResourceAsStream("application-jwt.properties");
SecretKey key = null;

try {
    if (inputStream != null) {
        properties.load(inputStream);
        String jwtSecretKey = properties.getProperty("jwt.secret");
        byte[] keyBytes = Decoders.BASE64.decode(jwtSecretKey);
        key = Keys.hmacShaKeyFor(keyBytes);
    }
} catch (IOException e) {
    System.out.println("error : " + e);
}

 

 

반응형

'멘질멘질] 2023 졸업 프로젝트' 카테고리의 다른 글

JWT] Secret key 랜덤 생성  (0) 2023.06.16
Spring Boot] 406 Not Acceptable 오류  (0) 2023.06.13
JPA Repository Test] @SpringBootTest vs @DataJpaTest  (0) 2023.06.09
Spring Boot] CORS 해결  (0) 2023.06.09
Spring Boot] 프로젝트를 진행하는 과정에서 원칙 정리  (0) 2023.06.09
  1. 문제 상황
  2. 내가 생각하는 문제의 원인
  3. 해결 방법 1
  4. 해결 방법 2
'멘질멘질] 2023 졸업 프로젝트' 카테고리의 다른 글
  • JWT] Secret key 랜덤 생성
  • Spring Boot] 406 Not Acceptable 오류
  • JPA Repository Test] @SpringBootTest vs @DataJpaTest
  • Spring Boot] CORS 해결
나른한 찰리
나른한 찰리
반응형
나른한 찰리
Moojun's Storage
나른한 찰리
전체
오늘
어제
  • 분류 전체보기 (83)
    • 포트폴리오 스프링 부트 프로젝트 (1)
    • 멘질멘질] 2023 졸업 프로젝트 (16)
    • 학부연구생 (5)
    • Spring Boot (17)
      • Test Code (10)
    • Amazon Web Services(AWS) (3)
    • Ubuntu Server (1)
    • RDB (6)
    • git (1)
    • 오류 (9)
    • MacOS (4)
    • python library (5)
    • 기타 (8)
    • 프로그래밍 도서 (4)
      • 클린 코드(로버트 마틴) (4)
    • 코딩 테스트 (3)
      • 프로그래머스 (3)
    • 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 우분투#ubuntu#mysql#mysql설치#mysql오류
  • pandas#dataframe

최근 댓글

최근 글

hELLO · Designed By 정상우.
내 관리 화면으로 이동
나른한 찰리
Junit5] 테스트에서 *.properties 정보 읽어오지 못하는 경우 해결 방법
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.