Java

@SpringBootTest가 테스트 속성을 사용하지 않음 물어보다

기록만이살길 2022. 10. 29. 15:33
반응형

@SpringBootTest가 테스트 속성을 사용하지 않음 물어보다

1. 질문(문제점):

Spring Boot 애플리케이션에서 application.properties를 암호화하기 위해 jasypt를 사용하고 있습니다. 내 목표는 jasypt가 테스트 암호화기 암호와 함께 사용되도록 통합 테스트를 업데이트하는 것입니다. 내 문제는 내 테스트가 테스트 속성을 무시하지 않는다는 것입니다.

의존성:

        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit-jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit-jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <scope>test</scope>
        </dependency>

두 개의 application.properties가 있습니다. 하나는 src/main/resources/application.properties 이고 다른 하나는 src/test/application-test.properties입니다. 테스트 속성에서 jasypt.encryptor.password=test를 설정하고 테스트 비밀번호를 사용하여 jasypt ENC 값으로 spring.data.mongodb.uri를 재정의합니다. 내 테스트는 다음과 같습니다.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;


@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("test")
@TestPropertySource("classpath:application-test.properties")
public class SpringBootAppTest{


    @Test
    public void shouldLoadContext(){
        //nothing to test
    }
}

보시다시피 저는 Spring Boot 테스트에 JUnit5를 사용하고 있습니다. 사용자 지정 테스트 속성을 사용하여 이 테스트를 작성하는 여러 방법을 시도했지만 동일한 예외가 발생합니다.

Unable to decrypt: ENC(JsHRQaQN0cuHgrq/0o ...)

값은 application-test.properties의 값이 아닌 src/main/resources/application.properties의 spring.data.mongodb.uri 속성 값입니다. 내가 무엇을 잘못하고 있으며 테스트 속성으로 "주"속성을 어떻게 재정의 할 수 있습니까?

2. 해결방안:

변경

@TestPropertySource("classpath:application-test.properties")

에게

@TestPropertySource(locations="classpath:application-test.properties")

@RunWith(SpringRunner.class)테스트 수업 에서

그것이 작동하지 않으면 여기에 마스터 접근 방식이 있습니다.

@TestPropertySource수준 에서 사용하십시오 class. 기본적으로 이 어노테이션은 어노테이션을 선언한 클래스와 관련된 속성 파일을 로드하려고 시도합니다.

예를 들어 귀하의 경우 테스트 클래스가 com.kunal.testpropertysource 패키지에 있는 경우 클래스 경로에 com/kunal/testpropertysource/DefaultTest.properties 파일이 필요합니다.

그런 다음 리소스 폴더에 추가해 보겠습니다.

# DefaultTest.properties
kunal.testpropertysource.one=default-value

또한 기본 구성 파일 위치를 변경하거나 더 높은 우선 순위를 갖는 추가 속성을 추가할 수 있습니다.

@TestPropertySource(locations = "/other-location.properties",
  properties = "kunal.testpropertysource.one=other-property-value")
61611197
반응형