弹簧启动测试最小测试片或手动配置



我有许多不同的 SpringBoot 测试正在运行。到目前为止,自动配置切片非常有用,尤其是与@MockBean结合使用时。

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

有没有办法手动设置对象树的尖端以启动,然后从那里自动连接所有需要的 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 不会生成正确的实现。

如何获得仅包含所需豆子的 Spring-Context?

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

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

对于更复杂的设置,声明生成的类将很麻烦且危险。

我仍在寻找一种更好更清洁的方式来让 Spring 决定需要什么课程。应该可以设置手头的类,让 Spring 决定需要哪些类并被实例化。

相关内容

  • 没有找到相关文章

最新更新