【发布时间】:2017-12-29 17:34:16
【问题描述】:
我正在使用 MapStruct,mapstruct-jdk8 版本 1.1.0.Final 并定义我通过 Spring 注入的抽象类。
我正在研究如何通过 Junit Test 测试它们? 我基本上有一个将使用 2 个子映射器的主映射器
@Mapper(componentModel = "spring", uses = {SubMapper1.class, SubMapper2.class})
public abstract class MainMapper {
@Mapping(target = "field1", qualifiedByName = {"MyMapper2Name", "toEntity"})
public abstract MyEntity toEntity(MyDto pDto);
public MyDto fromEntity(MyEntity pEntity) {
// Specific code, hence why I use Abstract class instead of interface.
}
}
我尝试了几件事,但无法正确实例化映射器以对其进行测试。
@RunWith(SpringRunner.class)
public class MainMapperTest {
private MainMapper service = Mappers.getMapper(MainMapper.class);
@Test
public void testToEntity() throws Exception {
.....
java.lang.RuntimeException: java.lang.ClassNotFoundException: 找不到 com.mappers.MainMapper 的实现
我也尝试过@InjectMock,但也没有骰子。
无法实例化名为“服务”的 @InjectMocks 字段。你没有 在字段声明中提供了实例,所以我尝试构建 实例。但是,我失败了,因为:'MainMapper 类型是 一个抽象类。
通过 Spring @Autowired
原因: org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 'com.mappers.MainMapper' 类型的合格 bean 可用:预期 至少 1 个符合自动装配候选资格的 bean。依赖 注释: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我猜这可能与注释处理器有关,并且在我启动测试时未生成映射器。 我找到了this class as example。
然而,AnnotationProcessorTestRunner 类似乎在 1.2 之前不可用,还没有最终版本。
所以我的问题是如何编写 Junit 测试来测试我在代码中通过 Spring 注入使用的 mapstruct 抽象类映射器。
【问题讨论】:
标签: spring unit-testing junit spring-test mapstruct