【发布时间】:2020-11-21 01:32:16
【问题描述】:
我需要通过自定义映射方法访问 Spring bean。但我还需要能够在对该映射方法进行单元测试时注入该 Spring bean 的模拟。
这是我的映射器类的一个最小示例:
@Mapper(componentModel = "spring")
public abstract class MyMapper {
private final MyBean myBean;
public MyMapper(MyBean myBean) {
this.myBean = myBean;
}
@BeforeMapping
protected MyElement initElement(MyElementDto dto) {
// custom logic using the injected MyBean to initialize MyElement
}
public abstract MyElement map(MyElementDto dto);
}
我希望 MapStruct 生成一个使用 MyMapper 的参数化构造函数的实现,如下所示:
@Component
public class MyMapperImpl extends MyMapper {
@Autowired
public MyMapperImpl(MyBean myBean) {
super(myBean);
}
// ... mapping function implementation ...
}
不过,MapStruct 似乎忽略了参数化构造函数,只支持默认的无参数构造函数。
所以问题是:我怎样才能以最简洁的方式实现这种类型的逻辑,以便生成的映射器实现是可单元测试的,并且可以正确地模拟 MyBean 依赖项?
使用 MapStruct 1.3.0.Final、Spring 4.3.25.Release、Mockito 1.9.5 和 Junit 4.12。
【问题讨论】:
-
这个问题提出了另一种注入bean的方法,也许对stackoverflow.com/questions/38807415/…有帮助
-
@marc 我敢肯定也必须有一个非表达式解决方案。
标签: spring dependency-injection mocking mapstruct