Mockito 如何模拟和断言抛出的异常

Mockito How to mock and assert a thrown exception

我有这个 junit:

@RunWith(MockitoJUnitRunner.class)
public class SecurityManagerServiceTest  {

    @Mock
    private SecurityManagerService securityManagerService = mock(SecurityManagerService.class);

    @Test
    public void testRequireAll() {
        when(securityManagerService.loggerUser()).thenReturn(fakeUser());
        doCallRealMethod().when(securityManagerService).requireRight(anyString());
        //given(securityManagerService.restoreRight("a")).willThrow(SecurityException.class);
        when(securityManagerService.restoreRight("a")).thenThrow(SecurityException.class);

    }

但是我有这个错误:

 unnecessary Mockito stubbings

我也试过:

   @Mock
    private SecurityManagerService securityManagerService = mock(SecurityManagerService.class);

    @Test
    public void testRequireAll() {
        when(securityManagerService.loggerUser()).thenReturn(fakeUser());
        doCallRealMethod().when(securityManagerService).requireRight(anyString());
        given(securityManagerService.restoreRight("a")).willThrow(SecurityException.class);
        

    }

问题是你在存根,但没有真正测试任何东西。如果你没有测试任何东西,那么就不需要存根。这就是为什么你有不必要的 Mockito 存根。

我假设您想测试您的 SecurityManagerService。如果你想这样做,你需要创建一个实例或者有一个那种类型的 bean,但不是模拟。然后你调用你想要测试的方法并断言你得到了预期的结果。

如果您希望得到异常,您可以这样测试它:

JUnit4,增强你@Test注解:

@Test(expected=SecurityException.class)

JUnit 5:

@Test
void testExpectedException() {
  Assertions.assertThrows(SecurityException.class, () -> {
    //Code under test
  });
}