Mockito存根异常– JUnit,TestNG
时间:2020-02-23 14:40:45 来源:igfitidea点击:
有时我们的方法会抛出异常,而我们想模拟对象并测试异常。
我们可以将Mockito模拟对象与" when()"和" thenThrow()"配合使用来模拟这种情况。
Mockito存根异常– JUnit 5
让我们看一个简单的示例,在该示例中我们将模拟对象方法以引发异常。
然后,我们将使用JUnit 5assertThrows
来测试异常及其消息。
package com.theitroad.mockito.examples; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; import org.junit.jupiter.api.Test; class JUnitMockitoStubExceptions { @SuppressWarnings("unchecked") @Test void test() { List<String> list = mock(List.class); when(list.size()).thenThrow(new RuntimeException("size() method 不支持")); Exception exception = assertThrows(RuntimeException.class, () -> list.size()); assertEquals("size() method 不支持", exception.getMessage()); } }
为简单起见,我在模拟List接口。
同样,我们也可以模拟其他任何对象,并指定其行为以在调用特定方法时引发异常。
Mockito存根异常– TestNG
如果您使用的是TestNG框架,那么我们可以使用assertThrows
断言。
@Test void test() { List<String> list = mock(List.class); when(list.size()).thenThrow(new RuntimeException("size() method 不支持")); assertThrows(RuntimeException.class, () -> list.size()); }
如果我们也想测试异常消息,那么我们可以使用@Test注释" expectedExceptions"和" expectedExceptionsMessageRegExp"属性。
@Test(expectedExceptions = RuntimeException.class, expectedExceptionsMessageRegExp = "size method 不支持") void test1() { List<String> list = mock(List.class); when(list.size()).thenThrow(new RuntimeException("size method 不支持")); list.size(); }