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
});
}
我有这个 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
});
}