spring - 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?
解决方案
我通过明确声明使用的所有实现找到了一种方法:
@SpringBootTest(classes = {ProductResponsibleUnitMapperImpl.class, LegalEntityMapperImpl.class, ProductHierarchyMapperImpl.class})
对于更复杂的设置,声明生成的类既麻烦又危险。
我仍在寻找一种更简洁的方法来让 Spring 决定需要哪些类。应该可以将类设置在手,让 Spring 决定需要哪些类并实例化。
推荐阅读
- php - 使用Vuejs和Axios获取000.000.009这种格式的mysql表的行数
- python - Gstreamer Python:管道未接收 EOS
- javascript - 使用 JSX 文件格式而不是 JS?
- python - Jupyter notebook 无法连接到内核(2) + Windows 10 Enterprise + ImportError: cannot import name 'constants'
- python-3.x - Cython 和 PyCharm:预期的类型警告
- azure-devops - AZP:是否有最佳实践能够在 yaml 模板中编写“命名空间”脚本任务以使用变量?
- jquery - 用jquery从id改变颜色
- android - 使用http包flutter从实时数据库中获取数据
- devexpress - 在 DevExpress 模板库中,XAF 控制器不出现
- linker - IAR LINKER 导出的带有块部分的符号