我正在使用Sping Boot 1.4.3,并且有一大堆用@DataJpaTest
注解的测试。默认情况下,它们针对内存中的数据库运行。我希望能够运行所有这些对本地MySQL暂时。我怎样才能以一种简单的方式做到这一点?
我发现我可以通过添加@ActiveProfiles("local")
来使它工作,其中我有一个指向我的本地MySQL的application-local.properties
,但是到处添加它,运行测试然后再次删除它的工作量太大了(因为我只想对MySQL手动运行这个,CI环境将对内存中的数据库运行)。
我使用Maven如果这很重要。
更新:
因此,我有一个application-local.properties
,它包含连接到本地MySQL数据库的db属性(我已经使用它来针对本地MySQL运行应用程序)
然后我在IntelliJ中右键单击一个包并选择“Run all tests in package”。在该运行配置的设置中,我将-Dspring.profiles.active=local
添加到“VM选项”字段。
我本以为这会在测试期间激活local
配置文件,但事实并非如此。如果我停止本地MySQL,测试仍然可以正常运行。
4条答案
按热度按时间goqiplq21#
在文档中,它指出您可以在测试类www.example.com上使用@AutoConfigureTestDatabase(replace= Replace.NONE)删除自动配置的h2数据源https://docs.spring.io/spring-boot/docs/1.4.2.RELEASE/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-jpa-test。
此外,您还需要在属性中提供您的数据库设置,以便它不会使用您的应用属性,例如:
我把这个放在application.properties的测试包里
kdfy810k2#
您可以在同一个www.example.com(或.yml)中添加具有MySQL数据源属性的配置文件application.properties:
application.yml
在集成测试类中使用
@ActiveProfiles("postgres")
,或者使用VM参数启动容器,如下所示:uxhixvfz3#
1.将带有JDBC连接的application.yml(properties)添加到src/test/resources中
1.使用@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)运行JPA测试-它禁用嵌入式数据库(h2),否则:
org.springframework.beans.factory.BeanCreationException:创建名为“dataSource”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalStateException:无法将DataSource替换为嵌入式数据库进行测试。如果你想要一个嵌入式数据库,请在classpath上放置一个受支持的数据库,或者调整@AutoConfigureTestDatabase的replace属性。
pjngdqdw4#
我的问题是,我在项目中有多个application.properties,DataJpaTest收集了所有这些属性,并用生产属性覆盖了我用于测试的属性。
我想到的最好的办法是通过注解类来指示测试使用特定的application.properties