【问题标题】:ResourceNotFoundException throws when a service layer method test is running运行服务层方法测试时抛出 ResourceNotFoundException
【发布时间】:2017-04-19 08:46:50
【问题描述】:

我正在使用 Spring Boot,我正在尝试创建一个测试。

其实我的测试课:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
public class MemberServiceImplTest {

    @InjectMocks
    MemberServiceImpl memberService;

    @Mock
    MemberRepository memberRepository;

    @Mock
    Member member;

    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void getMemberId() {

        Long memberId = 1l;
        Member member = new Member();
        ...
        Mockito.when(memberRepository.findOne(memberId)).thenReturn(member);
        MemberDto memberDto = memberService.getMemberById(memberId);
        ...
    }

在我的memberService 类和getMemberById 方法中,我调用了memberRepository 类的findOne 方法。如果未找到成员,则会引发 ResourceNotFoundException 异常。

我不明白为什么会出现此错误。 我没有使用正确的注释吗?

【问题讨论】:

  • 我知道这样的问题很难解决,但是您认为有什么方法可以从您的问题中创建一个最小、完整且可验证的示例 (stackoverflow.com/help/mcve)?那真的很有帮助。
  • 对于初学者来说,你的测试代码与 Spring 完全没有关系,所以你可以删除所有的类级别的注解:如果你只是使用 Mockito 来模拟所有的,就不需要启动 Spring Boot你的组件。
  • 或者您可能打算使用 Spring Boot Test 1.4 中的 @MockBean... 这是完全不同的事情。

标签: java spring-boot mockito spring-test


【解决方案1】:

如果 Mockito 没有为您传递的 Id 找到任何资源,它将自动抛出 ResourceNotFoundException

因为在Mockito.when(memberRepository.findOne(memberId)).thenReturn(member); 行中,您正在为提到的memberId 写信,所以应该返回特定的member

但实际上,当您调用该方法时,member 对象不是他们的,所以 Mockito 会抛出 ResourceNotFoundException

你必须使用@Test(expected = ResourceNotFoundException.class)

【讨论】:

    【解决方案2】:

    而不是这个

    @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

    使用这个 @RunWith(MockitoJUnitRunner.class)

    【讨论】:

      【解决方案3】:

      很难说清楚,因为我不能只是复制和粘贴所有代码来调试,但我相信你没有正确初始化模拟。尝试添加以下方法:

      @Before
      public void setup() {
        MockitoAnnotations.initMocks(this);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多