首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为Spring中的测试目的在内存数据库中配置特定

为Spring中的测试目的在内存数据库中配置特定
EN

Stack Overflow用户
提问于 2015-08-14 02:31:07
回答 7查看 70K关注 0票数 53

如何配置Spring应用程序,以便在运行单元测试时使用内存中的数据库(如H2/HSQL ),而在运行Spring应用程序时使用生产数据库Postgre/MySQL?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-08-14 02:45:16

弹簧配置文件可用于此。这将是一种具体的方式:

具有特定于环境的属性文件:

application.properties

代码语言:javascript
运行
复制
spring.profiles.active: dev

application-dev.properties

代码语言:javascript
运行
复制
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update

spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password

application-test.properties

代码语言:javascript
运行
复制
spring.jpa.database: HSQL

在MySQL和H2驱动程序中都有pom.xml,如下所示:

代码语言:javascript
运行
复制
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>test</scope>
</dependency>

最后但并非最不重要的是,用@ActiveProfiles("test")注释测试类。

票数 60
EN

Stack Overflow用户

发布于 2016-10-22 08:41:53

另一种方法是将注释@AutoConfigureTestDatabase添加到测试类中。我的测试通常是这样的:

代码语言:javascript
运行
复制
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class MyRepositoryTest {

    @Autowired
    MyRepository repository;

    @Test
    public void test() throws Exception {
        // Tests...
    }
}

请注意,需要在pom.xml文件中添加嵌入式数据库依赖项。对于嵌入式数据库,即使只有依赖项被添加到pom文件中,这个注释也是不必要的。

票数 44
EN

Stack Overflow用户

发布于 2019-04-26 07:36:46

使用@SpringBootTest魔术,只需执行以下两个更改即可。

  1. 在h2中添加“pom.xml”测试依赖项

com.h2database h2试验

  1. 使用@AutoConfigureTestDatabase

@RunWith(SpringRunner.class) @SpringBootTest(子类= MySpringBootApplication.class) @AutoConfigureTestDatabase公共类SpringBootTest{ @Autowired私有RequestRepository requestRepository;}

现在,测试中使用的所有spring /存储库都将使用h2作为后台数据库。

2019年-04-26 13:13:34.198 INFO 28627 -主beddedDataSourceBeanFactoryPostProcessor :用嵌入式版本取代' DataSource‘DataSource bean 2019年-04-26 13:13:34.199 INFO 28627 --主o.s.b.f.s.DefaultListableBeanFactory :重写bean 'dataSource‘定义 2019年-04-26 13:13:36.194 INFO 28627 --主o.s.j.d.e.EmbeddedDatabaseFactory :启动嵌入式数据库:o.s.j.d.e.EmbeddedDatabaseFactory用户名=‘sa’

注意:我仍然在'application.properties‘中定义了’spring‘属性,并且我不使用任何配置文件。@AutoConfigureTestDatabase将使用测试默认值AutoConfigureTestDatabase.Replace覆盖现有的jpa配置。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32001391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档