我正在try 为我的服务编写测试,其中一些测试没有通过描述抛出意外的异常类型,Expect:<com.bestteam.urlshorter.exception.ItemNotFoundException>但Was:<java.util.IllegalFormatConversionException>

    @Test
    public void testGetWhenLinkNotFoundThenThrowException() {
        assertThrows(ItemNotFoundException.class, () -> {
            linkService.get("shortLink");
        });
        verify(linkRepository, times(0)).save(link);
    }

下面是这个GET方法

  public LinkDto get(String shortLink) {
    Link linkEntity = linkRepository.findById(shortLink).orElseThrow(() -> new ItemNotFoundException(Link.class, shortLink));
    linkEntity.setOpenCount(
      linkEntity.getOpenCount() + 1
    );

    linkRepository.save(linkEntity);
    return linkMapper.toDto(linkEntity);
  }

LinkMapper是一个自定义映射器

  public LinkDto toDto(Link link) {
    if (link == null) {
      return null;
    }

    LinkDto linkDto = new LinkDto();
    linkDto.setLink(link.getLink());
    linkDto.setShortLink(link.getShortLink());
    linkDto.setOpenCount(link.getOpenCount());
    linkDto.setIsActive(link.getIsActive());
    linkDto.setCreationDateTime(link.getCreationDateTime());
    linkDto.setExpirationDateTime(link.getExpirationDateTime());

    if (link.getUser() != null) {
      linkDto.setUserId(link.getUser().getId());
    }

    return linkDto;
  }

ItemNotFoundException异常

    @ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ItemNotFoundException extends RuntimeException {
  public static final String DEFAULT_MESSAGE = "Entity not found";

  public ItemNotFoundException() {
    super(DEFAULT_MESSAGE);
  }

  public ItemNotFoundException(String message) {
    super(message);
  }

  public ItemNotFoundException(Class<?> entityClass, Long id) {
    super(String.format("%s: {%s, id=%d}", DEFAULT_MESSAGE, entityClass.getSimpleName(), id));
  }

  public ItemNotFoundException(Class<?> entityClass, String id) {
    super(String.format("%s: {%s, id=%d}", DEFAULT_MESSAGE, entityClass.getSimpleName(), id));
  }
}

我try 使用AdviceController创建全局异常处理程序,但没有帮助

推荐答案

问题出在ItemNotFoundException类的一个构造函数中:

public ItemNotFoundException(Class<?> entityClass, String id) {
    super(String.format("%s: {%s, id=%d}", DEFAULT_MESSAGE, entityClass.getSimpleName(), id));
}

您应该使用%s来代替%d.

Java相关问答推荐

如何为具有多对多关系的实体的给定SQL查询构建JPA规范?

如何在Android上获取来电信息

尽管类型擦除,instanceof与泛型在Java中如何工作?

使用联接和分页的SpringBoot Spring数据JPA

通过合并Akka Streams中的多个慢源保持订购

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

Java中实现的归并排序算法给出ArrayIndexOutOfBound异常

内存中的H2修剪尾随空格

使用Spring Boot3.2和虚拟线程的并行服务调用

Spring data JPA/Hibernate根据id获取一个列值

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

如何在JUNIT测试中覆盖ExecutorService?

无法使用Freemarker从XML中读取重复的标记值

如何在Java springboot中从一个端点发送多个时间响应?

JPA无手术同品种器械可能吗?

在Java Spring JPA中插入包含对其他实体的引用的列

为什么Spring要更改Java版本配置以及如何正确设置?

如何以事务方式向ibmmq发送消息

如何用Micrometer&;斯普肯

在不带instanceof或switch的java中记录模式