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

在测试类上调用方法时,模型映射程序获取空指针异常

欧阳昊焱
2023-03-14

当我调用模型映射器实体到DTO转换器方法时,我总是得到空指针异常。

这是将dto转换为实体的转换器服务,反之亦然

我以前没有处理过DTO,这是我第一次使用DTO,我还需要知道这是我实现DTO转换器服务的最佳方式吗,或者是否有任何建议。

@Autowired
private ModelMapper modelMapper;

@Bean
public ModelMapper modelMapper() {
    return new ModelMapper();
}

@Override
public NotificationDto entityToDtoNotification(Notification notification) {
    ModelMapper mapper = new ModelMapper();
    return mapper.map(notification, NotificationDto.class);
    
}

@Override
public Notification dtoToEntityNotification(NotificationDto notificationDto) {

    ModelMapper mapper = new ModelMapper();
    return mapper.map(notificationDto, Notification.class);

}

当我在测试调用中调用该方法时,我得到空值

class NotificationServiceImplTest {

    @Autowired
    private NotificationServiceImpl notificationService;

    @MockBean
    private NotificationRepository notificationRepository;

    @Autowired
    ConverterServiceImpl converterService;

    @Test
    public void testCreateTicket() {

        Notification notification = new Notification();
        notification.setId(1);
        notification.setMessage("Hello Hashan");


        NotificationDto notificationDto = new NotificationDto();

         
        //I get the null value as return

        notificationDto=converterService.entityToDtoNotification(notification);



        Mockito.when(notificationRepository.save(notification)).thenReturn(notification);
        
        assertThat(notificationService.save(notificationDto)).isEqualTo(notification);

        converterService.entityToDtoNotification(notification);
    }


}

通知实体

@Entity
@Table(name = "notification")
public class Notification {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String message;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Notification() {
    }

    public Notification(int id, String message) {
        this.id = id;
        this.message = message;
    }
}

通知DTO

public class NotificationDto {

    private int id;
    private String message;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public NotificationDto(int id, String message) {
        this.id = id;
        this.message = message;
    }

    public NotificationDto() {
    }
}

共有2个答案

逄嘉木
2023-03-14

解决方案:在测试类上添加@SpringBootTest注释后,我可以从转换器服务访问值,而不会出现空指针异常

@SpringBootTest
class NotificationServiceImplTest {
逄岳
2023-03-14

您应该使用@RunWith(SpringRunner.class)注释您的测试,以便您可以使用spring上下文自动关联属性。

请参阅:https://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/html/boot-features-testing.html

 类似资料:
  • 我有几个JOOQ存储库,它们从Postgres数据库获取数据,并将数据作为值对象提供。我使用JOOQ 3.10.7和一切工作正常。我已经将我的Spring启动版本从2.0.3升级到2.1.4,这将JOOQ版本升级到3.11.10。在映射Jooq记录时,我开始获取NullPointerExcema。 在上述场景中,当没有与给定条件(user.id.eq(1))匹配的记录时,fetchSingle必须

  • 我正在使用CSV reader从获取数据,并在使用DataProvider的测试函数中使用该数据。

  • 我有一个主页。我正在尝试使用测试注释测试TestNG中的页面标题。我得到了testTitle()的NullPointerException。url正在打开。

  • 问题内容: 因此,我的布局是一个单独的文件,因此请给它充气。然后,我更改布局中的文本视图和图像,并调用measure,但是在尝试测量布局时会得到空指针。我一生无法弄清楚为什么会这样。我试图最终将布局转换为位图。 这是XML 在measure()行中,它引发了一个空指针,并且我已经验证了getWidth和getHeight在给出合法值。 有任何想法吗? 谢谢! 问题答案: 抛出该错误的原因是,当您为

  • 我现在使用的是Itext PDFSmartCopy。我正在使用XMLWorker向document对象添加一些业务内容。然后我声明了一个阅读器(用于连接到此文档对象的pdf文件)。然后我用相同的文档对象和输出文件流作为参数调用PdfSmartCopy。然后使用常规步骤将页面复制到文档中, 但如果我使用一个新的文档对象ie而不添加业务内容,则这一块工作得很好。

  • 问题内容: 我正在尝试调用接口的方法。该方法在中实现。但是当我调用该方法时,我得到了空指针异常。 我知道这是因为它仍未初始化,因此您正在调用未初始化的对象。显然,接口方法永远不会初始化。但是,如何从类中调用该方法呢? 我只在下面放置相关的源代码- 源代码: SharedFragment.java 通用.java MainActivity.java 错误记录 问题答案: 永远不会初始化,或者正在使用