运行服务层方法测试时抛出ResourceNotFoundException

问题描述 投票:3回答:3

我正在使用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方法中,我调用了findOne类的memberRepository方法。如果没有找到成员,则抛出ResourceNotFoundException异常。

我不明白为什么我会收到这个错误。我没有使用正确的注释吗?

java spring-boot mockito spring-test
3个回答
0
投票

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

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

0
投票

而不是这个

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

使用这个@RunWith(MockitoJUnitRunner.class)


0
投票

如果Mockito没有找到你传递的任何资源,它会自动抛出ResourceNotFoundException

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.