当前位置: 首页 > 知识库问答 >
问题:

MapStruct映射器在单元测试中始终为空

鄢英毅
2023-03-14
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface DummyMapper {
    DummyMapper INSTANCE = Mappers.getMapper(DummyMapper.class);
    DummyResponseApi modelToApi(DummyResponse DummyResponseModel);
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {DummyMapper.class})
class ServiceClassTest {
   private DummyService service;
}
public DummyModelApi getSomething() {
   DummyModel mapMe = new DummyModel();
   return DummyMapper.INSTANCE.modelToApi(mapMe);
}

使用@SpringBootTest,据我所知,Spring实际上是在启动html" target="_blank">应用程序,并且应该创建映射器类,所以我不明白,为什么映射器总是空?!当我删除@SpringBootTest中的DummyMapper.class时,会出现一个错误,上面写着“Failed to load application Context”。这向我表明,映射器是被识别的。

我觉得奇怪的另一件事是,我必须在映射器中使用“unmappedtargetpolicy=reportingpolicy.ignore”,否则我会得到错误消息“unmapped properties conn't found”或其他什么,即使在两个模型中都有相同名称的属性。这在以前的项目中总是没有问题,不知道为什么MapStruct现在做的事情很奇怪。

共有1个答案

蒙才
2023-03-14

天哪,我找到解决办法了。现在我知道为什么要在映射器中添加“@mapper(unmappedTargetPolicy=reportingpolicy.ignore)”了。

在这里找到了解决方案:https://stackoverflow.com/A/69649688/8743351

在pom.xml/gradle.build中,Lombok需要位于mapstruct之前。

 类似资料:
  • 我使用的是一个用MapStruct生成的映射器: 缺省组件模型是spring(在pom.xml中设置)

  • 使用MapStruct,我创建了一个映射器,它是一个抽象类。我决定将映射器从接口转换为抽象,以便使用组件名称,该组件本身使用名为的组件。 尽管映射工作正常,但在单元测试中,它会抱怨组件找不到合格bean。 映射器类。我尝试在注释的属性中添加。但是异常移到了的下一个组件。 出现异常的测试类。正如我提到的,我尝试将添加到。我还尝试通过添加来完全模仿它。

  • 我有一个简单的Java单模块Gradle项目,其中我使用Mapstruct进行Java映射。我的如下所示: 我的源文件夹包含以下Java源代码:

  • 我正在尝试按如下方式对Mapstruct嵌套映射器进行单元测试: 我正在尝试测试EventMapper: 但它在以下方面不断失败: 创建名为“eventMapper”的bean时出错:bean的实例化失败;嵌套的异常是org。springframework。豆。BeanInstationException:未能实例化[com.mycompany.cna.projects.fishmarket.ba

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • 有人能帮忙填写上面的评论部分吗?或者是否有其他选项来映射这些对象? 编辑:我尝试了下面的解决方案,但是接口实现类本身发生了变化。