2

我正在使用一个名为 spring-cloud-aws 的依赖模块。它有一个 @Configuration 类,如 org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration 在我的 SpringBoot JUnit 测试用例中,检测到 SqsConfiguration 类并且初始化 Bean。我想在我的 JUNit 测试用例中排除这个配置。如何做到这一点?

我尝试使用 @ComponentScan 它没有用。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SQLTestConfig.class)
@ActiveProfiles("test")
public class BusinessManagerTest {

}

@TestConfiguration
@ComponentScan(basePackages = {"package1","package1"},
excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = SqsConfiguration.class)})
@Profile("test")
class SQLTestConfig {   

    @Bean
    public SomeBean beans() {

        return new SomeBean();
    }



}

加载此配置类需要 aws 凭证可用。我不想注入凭据来运行一个简单的 Bean 测试用例。

org.springframework.beans.factory.BeanCreationException:在类路径资源[org/springframework/cloud/aws/messaging/config/annotation/SqsConfiguration.class]中定义名称为“simpleMessageListenerContainer”的bean创建错误:调用init方法失败;嵌套异常是 com.amazonaws.services.sqs.model.AmazonSQSException:请求中包含的安全令牌已过期

4

2 回答 2

0

有多种方法可以在测试期间排除特定的自动配置:

  • 通过您的属性排除application-test.properties
spring.autoconfigure.exclude=org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration
  • 通过排除@TestPropertySource
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(classes = SQLTestConfig.class)
@TestPropertySource(properties ="spring.autoconfigure.exclude=org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration")

  • 通过 排除@EnableAutoConfiguration,例如:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(classes = SQLTestConfig.class)
@EnableAutoConfiguration(exclude=SqsConfiguration.class)

选择一个更适合你的;)

于 2019-09-07T19:58:52.093 回答
0

因此,要禁用自动加载测试的所有 Bean,测试类可以显式提及所需的依赖项。这可以使用ContextConfiguration注释来完成。例如,

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {EmployeeService.class})
public class EmployeeLeavesTest { 

   @Autowired
   private EmployeeService employeeService;

}

在这个例子中,只有 EmployeeService 类可用,其他 bean 不会被加载。

于 2021-03-09T14:01:21.903 回答