我正在使用 jasypt 在 Spring Boot 应用程序中加密 application.properties。我的目标是更新我的集成测试,以便将 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
}
}
如您所见,我使用 JUnit5 进行 Spring Boot 测试。我尝试了多种使用自定义测试属性编写此测试的方法,但我得到了同样的例外:
Unable to decrypt: ENC(JsHRQaQN0cuHgrq/0o ...)
它的值是来自 src/main/resources/application.properties 的 spring.data.mongodb.uri 属性值,而不是来自 application-test.properties 的值。我做错了什么,如何用测试属性覆盖我的“主要”属性?