首页 > 解决方案 > Spring Boot 测试最小测试片或手动配置

问题描述

我有许多不同的 SpringBoot 测试正在运行。到目前为止,自动配置切片确实很有帮助,尤其是与@MockBean.

但是在我目前的测试中,没有这样的切片适合,并且使用启动完整的上下文@SpringBootTest太慢了。

有没有办法手动设置要开始的对象树的尖端,并从那里弹簧自动装配所有需要的bean?或者有没有办法手动设置所有需要的bean?

在我的具体情况下,我想测试一个 MapStruct 生成的映射器(使用componentModel = "spring"),这个映射器使用另外两个映射器,每个映射器都注入一个服务来完成他们的工作。

服务通过以下方式提供@MockBean

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductResponsibleUnitMapperTest {

    @Autowired
    private PRUMapper mapper;

    @MockBean
    private TradingPartnerService tradingPartnerService;

    @MockBean
    private ProductHierarchyService productHierarchyService;

    @Test
    public void mapForthAndBack(){
      //works but takes ages to boot
    }

}

我无法在映射器(用于服务)上使用构造函数注入,因为 MapStruct 不会生成正确的实现。

如何获取仅包含所需 bean 的 Spring-Context?

标签: springspring-bootmockitospring-boot-testmapstruct

解决方案


我通过明确声明使用的所有实现找到了一种方法:

@SpringBootTest(classes = {ProductResponsibleUnitMapperImpl.class, LegalEntityMapperImpl.class, ProductHierarchyMapperImpl.class}) 

对于更复杂的设置,声明生成的类既麻烦又危险。

我仍在寻找一种更简洁的方法来让 Spring 决定需要哪些类。应该可以将类设置在手,让 Spring 决定需要哪些类并实例化。


推荐阅读