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();
}

