个性化阅读
专注于IT技术分析

Mockito参数匹配器

参数匹配器主要用于在Mockito中执行灵活的验证和存根。它扩展了ArgumentMatchers类以访问所有匹配器函数。 Mockito使用equal()作为遗留方法来验证和匹配参数值。在某些情况下, 在验证参数值期间我们需要更大的灵活性, 因此我们应该使用参数匹配器而不是equal()方法。 ArgumentMatchers类在org.mockito包中可用。

ArgumentMatchers类包含多种方法。其中一些如下:

方法类型和方法名称 描述
<T>任何() 它匹配所有值(任何值), 包括空值和varargs。
boolean anyBoolean() 它与任何布尔值或非空布尔值匹配。
byte anyByte() 它与任何字节或非空字节值匹配。
char anyChar() 它与任何char或非null的字符值匹配。
集合<T> anyCollection 它与应用程序中的任何非null集合匹配。
double anyDouble() 它匹配任何双精度或非空双精度值。
float anyFloat() 它与任何浮点或非空浮点值匹配。
int anyInt() 它与任何int或非null的整数值匹配。
Iterable <T> anyIterable() 它与任何int或非null的整数值匹配。
Iterable <T> anyIterable() 它与任何非空的可迭代值匹配。
List <T> anyList() 它匹配任何非空列表。
long anyLong() 它匹配任何长或非空的long值。
Set <T> anySet() 它匹配任何非空集。
short anyShort() 它与任何short或非null的short值匹配。
String anyString() 它匹配任何非空字符串。
<T> argThat(ArgumentMatcher <T>匹配) 它允许创建自定义参数匹配器。
boolean booleanThat(ArgumentMatcher <Boolean>匹配器) 它允许创建自定义布尔参数匹配器。
byte byteThat(ArgumentMatcher <Byte>匹配) 它允许创建自定义字节参数匹配器。
char charThat(ArgumentMatcher <字符>匹配器) 它允许创建自定义char参数匹配器。
String contains(String substring) 它与包含子字符串的String参数匹配。
double doubleThat(ArgumentMatcher <Double>匹配器) 它允许创建自定义的双参数匹配器。
String endsWith(String suffix) 它匹配以给定后缀结尾的String参数。
boolean eq(boolean value) 它与等于给定值的布尔参数匹配。
double eq(double value) 它与等于给定值的double参数匹配。
long eq(long value) 它匹配等于给定值的long参数。
<T> isNotNull() 它与not null参数匹配。
<T>为Null() 它与null参数匹配。
<T>相同(T值) 它检查对象参数是否与给定值相同。

注意:使用参数匹配器时, 所有参数必须由匹配器提供。

参数匹配示例

在这里, 我们将创建一个参数匹配器的示例。我们在测试案例中使用anyInt()方法, 我们可以使用ArgumentMatchers类中可用的任何方法。

TestList.java

import static org.junit.Assert.*;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
public class TestList { 
              @Test
	  public void testList_Argument_Matchers() {

		List<String> mocklist = mock(List.class);

		when(mocklist.get(Mockito.anyInt())).thenReturn("Mockito");
		
		assertEquals("Mockito", mocklist.get(0));
		assertEquals("Mockito", mocklist.get(1)); 
                        assertEquals("Mockito", mocklist.get(2));
	}
 }

输出如下

以下输出显示使用参数匹配器成功运行了测试。

参数匹配器

使用参数匹配器引发异常的示例

在这里, 我们将创建一个使用参数匹配器引发异常的示例。在此示例中, 我们将使用JUnit功能@Test(expected = RuntimeException.class)来防止测试失败。如果我们不使用它, 则测试将失败并引发异常。

TestList.java

import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;

public class TestList {

	@Test(expected = RuntimeException.class)
	  public void testList_ThrowsException() {
		  
	  List<String> mocklist = mock(List.class);
	  
	  when(mocklist.get(Mockito.anyInt())).thenThrow(new RuntimeException("Error.."));
	  mocklist.get(0);
	  }
 }

输出如下

以下输出显示使用@Test(expected = RuntimeException.class)成功运行了测试。

参数匹配

以下输出显示错误, 因为我们没有使用@Test(expected = RuntimeException.class)。

参数匹配

赞(0)
未经允许不得转载:srcmini » Mockito参数匹配器

评论 抢沙发

评论前必须登录!