我试图在测试中使用 H2 数据库在 Spring Boot api 上运行测试,但是,当尝试运行测试时,系统使用主资源中的 application.properties 而不是测试。 我尝试将文件命名为 application-test.properties 并在测试类中使用注释
@ActiveProfiles("test")
但这不起作用(测试放入 main/resource 中,然后放入 test/resouce 中)
现在我不知道该尝试什么。
我的主要/资源/应用程序.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/chamados
spring.datasource.username=root
spring.datasource.password=12345
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
我的测试/资源/application.properties:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=false
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
我刚刚运行的测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BackEndApplicationTests {
@Test
public void contextLoads() {
}
}
我的pom.xml:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<jwt.version>0.9.1</jwt.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Autenticação -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Spring 首先启动并始终加载 application.properties 然后如果存在
application-{profile}
。在这种情况下,最后一个将覆盖父级 (application.properties) 的一些属性。欲了解更多信息,请访问 spring-boot 文档。
您应该有
main/resource/application.properties
和 test/resource/application-test.properties
(不是测试目录中的 application.properties)+ @ActiveProfiles("test")
。然后它就会起作用。
如果您认为这不起作用 - 检查正在运行的应用程序的类路径。
例如idea+maven-目标目录; idea + gradle - 构建目录。
在同一目录中创建另一个名为 application-test.properties 的应用程序文件,其中包含以下内容,无需在测试下创建:
spring.datasource.url = "jdbc:h2:~/testdb;DB_CLOSE_ON_EXIT=FALSE"
spring.datasource.username = sa
spring.datasource.password =
spring.datasource.driverClassName = org.h2.Driver
然后将以下注释添加到您的测试类中:
@ActiveProfiles("test")
这将起作用,因为在 Spring Boot 中我们可以有多个配置文件,因此我们使用测试名称创建一个配置文件。