如何在集成测试时加载自定义 spring 引导启动器?

How to make a custom spring boot starter loadable while integration test?

我们已经创建了一个自定义 spring 引导启动程序,其中包含几个可重复使用的跨内部项目的通用功能。 启动器按预期工作正常。但是,在集成测试时,使用启动器的项目无法找到自定义启动器创建的所有 bean。

注意:内部项目正在他们的集成测试中使用 class 注释 @SpringBootTest 以加载整个 spring 上下文。

如果没有更多信息,我会说您的自定义 spring-boot-starter 没有相同的命名空间,因此不会从您的内部应用程序扫描组件。

假设您的内部项目命名空间是:com.hello.package.p1 并且您的 Spring-boot-starter 具有命名空间:net.greeting.package.p1

尝试这样的事情:

@SpringBootTest(类 = TestConfiguration.class)

并在您的 TestConfiguration.class 中:

@Configuration
@ComponentScan(basePackages = "net.greeting.package.p1")
public static class TestConfiguration {

    // ...

}

感谢您的回答。

在正常执行内部项目时,我清楚地看到他们正在获取bean实例,而无需添加任何自定义组件扫描。我们刚刚将自定义启动器添加到它们的依赖项中。我不明白为什么在集成测试时没有加载它。 (我认为应该向 Spring 社区报告)

通过将 CommonAutoConfiguration class 导入内部项目集成 class。

,我找到了一个我认为不是最佳解决方案的解决方法
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { InternalProjectbootApplication.class })
@DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)
@Import(CommonAutoConfiguration.class)
public class ArchiveUnitServiceITTest implements ServiceInterfaceIT {...