首页 > 解决方案 > 运行测试时排除 SpringApplicationRunListener

问题描述

我使用了一个库有一个类实现 SpringApplicationRunListener

public class FromLibApplicationRunListener implements SpringApplicationRunListener {...}

这个库加载了很多我在运行测试时不想拥有的东西。所以我尝试创建一个 TestApplication

@SpringBooApplication
@ComponentScan(excudeFilters = @ComponentScan.Filters(type= ASSIGNABLE_TYPE, 
   value={RealApp.java, FromLibApplicatioRunListener})
public class TestApp {
   public static main(String[] args) {
     SpringApplication.run(TestApp.class ,args);
   }
}

但是当我运行TestApp时,它仍然抛出异常

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.....FromLibApplicationRunListner]: Constructor threw exception; nested exception is java.lang.ExceptionInInitializerError
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:435)
    ... 6 more

运行测试时如何删除此库?

标签: javaspringspring-boot

解决方案


您可以为此使用配置文件:

  1. 排除侦听器类的测试配置文件
@Profile("!test")
public class FromLibApplicationRunListener implements SpringApplicationRunListener {...}
  1. 为测试类设置配置文件
...
@ActiveProfiles("test")
public class MyTest {

或在文件中设置应用程序活动配置application.yaml文件(或application.properties

spring:
  profiles:
    active: dev

推荐阅读