카테고리 없음

JUnit 5를 사용한 스프링 테스트 속성

기록만이살길 2021. 2. 21. 18:12
반응형

JUnit 5를 사용한 스프링 테스트 속성

1. 질문(문제점):

이제 JUnit 5와 Spring Boot에서 테스트를 사용하기 시작했습니다. 컨트롤러, 서비스 및 리포지토리가있는 Rest API와 .NET @value에서 속성을 가져 오는 데 사용 하는 일부 utils 클래스가 있습니다 application.properties. 기본 구성을 사용하여 Spring의 "프로필"을 사용하지 않습니다.

내 응용 프로그램 메인 :

@EnableScheduling
@EnableDiscoveryClient
@ComponentScan
@SpringBootApplication
public class MyRestApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyRestApiApplication.class, args);
    }

}

사용하는 클래스 @value:

@Component
public class JWTUtils implements Serializable {

    @Value("${jwt.validity}")
    public String JWT_TOKEN_VALIDITY;

    @Value("${jwt.secret}")
    private String secret;

    // There's no constructors in the class.
}

메인 테스트 클래스 :

@SpringBootTest
class MyRestApiApplicationTests {

    @Test
    void contextLoads() {
    }
}

속성이 필요한 내 테스트 클래스 :

class JWTUtilsTest {

    JWTUtils jwtUtils;

    @Test
    void getUsernameFromToken() {
        jwtUtils = new JWTUtils();
        assertNotNull(jwtUtils.JWT_TOKEN_VALIDITY);
        String username = jwtUtils.getUsernameFromToken("token-here");
        assertNotNull(username);
        assertEquals(username, "admin");
    }
}

내 프로젝트의 아키텍처는 다음과 같습니다.

main/
├── java/
│   ├── com.foo.controller/
│   ├── com.foo.model/
│   ├── com.foo.repository/
│   └── com.foo.service/
└── resources/
    ├── application.properties
    ├── banner.txt
    
test/
├── java/
│   ├── com.foo.controller/
│   ├── com.foo.model/
│   ├── com.foo.repository/
│   └── com.foo.service/
└── resources/
    ├── application-test.properties

주 테스트 클래스에서 "@TestPropertySource"및 / 또는 "@ActiveProfiles ("test ")"를 시도했지만 작동하지 않았습니다. "@RunWith (SpringRunner.class)"로도 시도했습니다.

이 테스트를 실행할 때 내 "비밀"값은 "null"이며,이 값은 내 application.properties

"@Autowired"를 입력하려고 JWTUtils jwtUtils했지만 null이 나왔습니다. @Autowired가 작동하지 않았습니다.

2. 해결방안:

  1. JWTUtilsTest 스프링 부트 테스트가 아닙니다. 따라서 스프링 부트 마법 (구성 값 주입과 같은)이 없습니다.
  2. JWTUtils자신 의 테스트 인스턴스를 만들고 있습니다. 스프링이 마법을 발동하게하려면 스프링이 생성하도록해야합니다 (예 : 주석 달기 @AutowiredJWTUtilsTest스프링 부트 테스트 만들기) .
65890449
반응형