Spring Boot测试最小测试片或手动配置

时间:2019-01-23 16:44:16

标签: spring spring-boot mockito spring-boot-test mapstruct

我正在运行许多不同的SpringBoot测试。到目前为止,auto configuration slices确实很有帮助,特别是与@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?

1 个答案:

答案 0 :(得分:0)

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

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

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

我仍在寻找一种更好的更干净的方法来让Spring决定需要哪些类。应该有可能设置现有的类,并让Spring决定需要和要实例化的类。