测试@ConditionalOnClass自动配置

got*_*nne 2 java integration-testing spring-boot

我们开发了许多“内部”Spring Boot Starter 和自动配置,支持各种 NFR,例如日志记录、配置、安全性等。

我们面临的最大测试挑战是如何测试@ConditionalOnClass自动配置的不同组合。

例如:

@Configuration
@ConditionalOnClass(Foo.class)
public class Config1 {

}

@Configuration
@ConditionalOnClass(Bar.class)
public class Config2 {

}

@Configuration
@ConditionalOnMissingClass(Foo.class)
public class Config3 {

}    
Run Code Online (Sandbox Code Playgroud)

我们如何操作测试项目的类路径来测试类路径上存在的Foo& jar 文件的各种组合?Bar那里有图书馆吗?我想知道春天的人是如何做到这一点的?

Jim*_*meh 5

我认为您正在寻找的是 ApplicationContextRunner。

@Test
public void whenDependentClassIsNotPresent_thenBeanMissing() {
    new ApplicationContextRunner().withUserConfiguration(ConditionalOnClassConfiguration.class)
        .withClassLoader(new FilteredClassLoader(DependentClass.class))
        .run(context -> assertThat(context).doesNotHaveBean(BeanConditionalOnDependentClass.class));
}
Run Code Online (Sandbox Code Playgroud)

来源: https: //www.baeldung.com/spring-boot-context-runner