java - Mockito 如何模拟和断言抛出的异常
问题描述
我有这个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
});
}
推荐阅读
- android - firebase 中的多用户通知
- python - Python NET 使用对象作为值的类型创建通用字典
- javascript - 在 Javascript 中解构对象 - ngbind - Angular 4+
- php - 如何使用 laravel 实现/处理自动出价?
- python - 分组后折叠数据框熊猫
- office365 - 使用 EWS 访问 Exchange (Office 365) 外部联系人
- c - 在 C 中使用 Netcat 时数据丢失
- javascript - js替换为不同的名称
- css - 如何将动画渐变添加到 svg 路径?
- python - 使用预定义函数打开文件(使用方法)