我正在运行许多不同的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?
答案 0 :(得分:0)
通过明确声明所有使用的实现,我找到了一种方法:
@SpringBootTest(classes = {ProductResponsibleUnitMapperImpl.class, LegalEntityMapperImpl.class, ProductHierarchyMapperImpl.class})
对于更复杂的设置,声明生成的类既麻烦又危险。
我仍在寻找一种更好的更干净的方法来让Spring决定需要哪些类。应该有可能设置现有的类,并让Spring决定需要和要实例化的类。