当前位置: 首页 > 面试题库 >

在spring测试中禁用@EnableScheduling

王旺
2023-03-14
问题内容

当我运行单元测试时,它会调用我的计划任务。我想防止这种行为,这是由于我@EnableScheduling在主应用程序配置中遇到的事实造成的。

如何在单元测试中禁用此功能?

不知道我该怎么做?还是过度杀伤力?我当时在考虑为单元测试使用一个单独的AppConfiguration,但是当我这样做时,我感觉好像重复了两次代码吗?

@Configuration
@EnableJpaRepositories(AppConfiguration.DAO_PACKAGE)
@EnableTransactionManagement
@EnableScheduling
@ComponentScan({AppConfiguration.SERVICE_PACKAGE,
                AppConfiguration.DAO_PACKAGE,
                AppConfiguration.CLIENT_PACKAGE,
                AppConfiguration.SCHEDULE_PACKAGE})
public class AppConfiguration {

    static final    String MAIN_PACKAGE             = "com.etc.app-name";
    static final    String DAO_PACKAGE              = "com.etc.app-name.dao";
    private static  final  String ENTITIES_PACKAGE  = "com.etc.app-name.entity";
    static final    String SERVICE_PACKAGE          = "com.etc.app-name.service";
    static final    String CLIENT_PACKAGE           = "com.etc.app-name.client";
    static final    String SCHEDULE_PACKAGE         = "com.etc.app-name.scheduling";


    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
       // stripped code for question readability
    }

    // more app config code below etc

}

单元测试示例

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={AppConfiguration.class})
@Transactional
@TransactionConfiguration(defaultRollback = true)
@WebAppConfiguration
public class ExampleDaoTest {

    @Autowired
    ExampleDao exampleDao;

    @Test
    public void testExampleDao() {
        List<Example> items = exampleDao.findAll();
        Assert.assertTrue(items.size()>0);
    }
}

问题答案:

如果你不想使用配置文件,则可以添加标志以启用/禁用应用程序调度

在你AppConfiguration添加此

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

在你的测试中,只需添加此注释即可禁用计划

@TestPropertySource(properties = "app.scheduling.enable=false")


 类似资料:
  • 我正在使用和构建一个简单的rest API。生产应用程序应该使用redis-session实现,而测试应该使用默认的(非Redis)Spring-Session。 但是,当在项目中声明maven依赖项时,spring-boot将自动创建,而在测试配置中没有注释。 我的设置 申请代码: 测试:

  • 我使用spring boot版本“1.3.0.M5”(我也尝试了版本“1.2.5.Release”)。我添加了Spring Security性:

  • 我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。

  • 当使用并在本地运行集成测试时,我会得到以下错误消息: 这是完全可以理解的,因为这个环境变量在本地不存在,而且我不想在运行测试时使用Sleuth/StackDriver跟踪。我已经查看了参考文档,但似乎只能找到如何针对特定集成点禁用Sleuth的信息,如RxJava、RestTemplate等,但如何完全禁用Sleuth呢? 我尝试设置,但这似乎没有什么不同。

  • 当我试图再次运行同样的测试时: 如何禁用缓存,以便gradlew运行整个测试? 谢谢