JUnit 4&Spring Boot - 在测试之前选择性地重新加载上下文/重新加载Spring Security配置
问题描述:
我使用SpringJUnit4ClassRunner为Spring Boot应用程序运行集成测试。JUnit 4&Spring Boot - 在测试之前选择性地重新加载上下文/重新加载Spring Security配置
在我的搜索过程中,我发现可以使用@DirtiesContext重新加载应用程序上下文。我只是需要重新加载安全配置(这取决于一个数据库条目),同时保持其余(或准确地说:我需要保持H2数据库的原样)。
如何仅在JUnit测试之前重新加载安全配置?
答
如果您需要保持H2数据库的原样,您可以考虑将属性spring.jpa.hibernate.ddl-auto
设置为update
,因为如果不存在,它将创建数据库,并且如果不存在,将保持其存在。如果您已有application-test.properties
,则可以创建另一个属性,如application-securityTest.properties
。
#... Your DB connection info
spring.jpa.hibernate.ddl-auto=update
然后在您的测试类,你需要激活与注释@ActiveProfiles
此配置文件,并使用@DirtiesContext
重新加载Spring上下文:
@ActiveProfiles("securityTest")
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
public class SecurityTest { ... }
答
我解决了这个问题的另一种方式,我修改了FPGA实现这样安全配置可以在运行期间可变地修改,并且在启动时不需要数据库条目。
我正在使用Liquibase,忘了提及。 或者另一种方法:在Spring Boot开始加载应用程序上下文之前,如何将数据(它只是启动应用程序启动所需的一条记录)插入数据库? –
您可以这样做:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html,或者您可以使用insert语句编写SQL脚本并执行它(在测试执行之前,请访问https://stackoverflow.com/a/1497614/4857050) –