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 { ... } 
+0

我正在使用Liquibase,忘了提及。 或者另一种方法:在Spring Boot开始加载应用程序上下文之前,如何将数据(它只是启动应用程序启动所需的一条记录)插入数据库? –

+1

您可以这样做:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html,或者您可以使用insert语句编写SQL脚本并执行它(在测试执行之前,请访问https://*.com/a/1497614/4857050) –

我解决了这个问题的另一种方式,我修改了FPGA实现这样安全配置可以在运行期间可变地修改,并且在启动时不需要数据库条目。