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