我正在使用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
}
}
正如你所看到的,我在我的Spring Boot测试中使用JUnit5。我尝试了多种编写自定义测试属性的方法,但是我得到了相同的异常:
Unable to decrypt: ENC(JsHRQaQN0cuHgrq/0o ...)
该值是来自src/main/resources/application.properties中的spring.data.mongodb.uri属性值,而不是来自application-test.properties中的值。我做错了什么,如何使用测试属性覆盖我的“主”属性?
@TestPropertySource
注解?它应该读取测试属性文件,并设置活动配置文件。 - daniusrc/test/resources
,它就可以运行了 @TudorGrigoriu - Ryuzaki L