SpringBoot 配置测试用例不启用定时器

  |  
阅读次数
  |  
字数 267
  |  
时长 ≈ 1 分钟

我们先看一下代码:

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@ActiveProfiles("local")
@Slf4j
public class FooServiceTest {
}

@SpringBootApplication
@EnableScheduling
@Slf4j
public class App {
}

使用以上代码,在测试用例中启动时,会执行App这个类进行初始化,在App中我们使用了@EnableScheduling表示启用定时器,这时候如果我们在运行测试用例时不需要启动定时器配置,我们应该使用@ConditionalOnProperty加一下条件限制,来达到这个功能,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@ActiveProfiles("local")
@TestPropertySource(properties = "app.scheduling.enable=false")
@Slf4j
public class FooServiceTest {
}

@SpringBootApplication
@Slf4j
public class App {

@ConditionalOnProperty(
value = "app.scheduling.enable", havingValue = "true", matchIfMissing = true
)
@Configuration
@EnableScheduling
public static class SchedulingConfiguration {
}

}

这里使用了一个静态内部类来达到此效果,在类上面加上配置启动限制@ConditionalOnProperty,默认为启用,然后我们在写测试用例时,不需要启动的时候则使用@TestPropertySource设置条件里面的属性app.scheduling.enablefalse即可。