我使用 SpringJUnit4ClassRunner 为 Spring Boot 应用程序运行集成测试。
在搜索过程中,我发现可以使用@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 { ... }
我以另一种方式解决了这个问题,我修改了实现,以便可以在运行时可变地修改安全配置,并且在启动时不需要数据库条目。