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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行服务层方法测试时抛出ResourceNotFoundException相关的知识,希望对你有一定的参考价值。

我正在使用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异常。

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

答案

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

@Before
public void setup() {
  MockitoAnnotations.initMocks(this);
}
另一答案

而不是这个

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

使用这个@RunWith(MockitoJUnitRunner.class)

另一答案

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

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

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

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

以上是关于运行服务层方法测试时抛出ResourceNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

当我运行测试用例时,实体管理器已成功注入,但在运行 Web 应用程序时抛出 NullPointerException

Espresso 在云中的设备上运行时抛出“在视图中执行“单击”时出错”,但相同的测试在本地成功运行

在继承中重写方法时抛出异常的问题

使用 NSubstitute 模拟出现问题时抛出异常的方法

Spring Boot 1.5.9和嵌入式jetty服务器在运行时抛出空指针异常?

测试期间的Spring Boot JPA事务 - 不会在插入时抛出密钥违例异常