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

Mockito注解用法示例

点击下载

Mockito框架提供了各种注释, 以使代码简单易懂。而且, 它减少了有助于集中精力于业务逻辑的代码行。在Mockito中, 当我们想在不同位置使用模拟对象以避免多次调用相同方法时, 注释很有用。

Mockito注释如下:

  • @Mock:用于模拟对象, 有助于最大程度地减少重复的模拟对象。由于参数名称(字段名称)用于标识模拟, 因此它使测试代码和验证错误更易于阅读。 @Mock批注在org.mockito包中可用。
    以下代码段显示了如何使用@mock批注:
@Mock
ToDoService servicemock;

注意:@Mock注释始终与@RunWith注释一起使用。

  • @RunWith:这是一个类级别的注释。它用于保持测试干净并改善调试。它还会检测测试中可用的未使用的存根, 并使用@Mock注释对模拟进行初始化。 @RunWith批注在org.mockito.junit包中可用。
    以下代码段显示了如何使用@RunWith批注:
@RunWith(MockitoJUnitRunner.class)
public class ToDoBusinessMock {
.....
}

在上面的代码片段中, MockitoJUnitRunner类用于检查是否创建了所有模拟并在需要时自动装配。

  • @InjectMocks:它标记应在其上执行注入的字段或参数。它允许速记模拟和间谍注入, 并最大程度地减少重复的模拟和间谍注入。在Mockito中, 通过setter注入, 构造函数注入和属性注入来注入模拟。 @InjectMocks批注在org.mockito包中可用。
    以下代码段显示了如何使用@InjectMocks批注:
@InjectMocks
ToDoBusiness business;
  • @Captor:它允许创建字段级参数捕获器。它与Mockito的verify()方法一起使用, 以获取调用方法时传递的值。像其他批注一样, org.mockito包中也提供了@Captor批注。
    以下代码段显示了如何使用@Captor批注:
@Captor
ArgumentCaptor<String> argumentCaptor;
  • @Spy-允许创建部分模拟的对象。换句话说, 它允许将现场实例快速包装在间谍对象中。与其他注释一样, org.mockito包中也提供了@Spy注释。
    以下代码段显示了如何使用@Spy批注:
@Spy	
ArrayList<String> arraylistSpy;

Mockito注释的示例(@ Mock, @ RunWith, @ InjectMocks, @ Captor, @ Spy)

在这里, 我们将使用注释@ Mock, @ RunWith, @ InjectMocks, @ Captor, @ Spy创建一个测试示例。以下是创建Mockito注释示例的步骤:

步骤1:创建一个名为ToDoService的接口, 其中包含两个未实现的方法。

ToDoService.java

import java.util.List;

public interface ToDoService {
 
	public List<String> getTodos(String user);
	public void deleteTodos(String doString); 
 }

步骤2:创建一个名为ToDoBusiness的实现类。

ToDoBusiness.java

import java.util.ArrayList;
import java.util.List;

// ToDoBusiness is a SUT (system under test) 
// ToDoService is a Dependency (as ToDoBusiness is dependent on it)

public class ToDoBusiness {

	public ToDoService doService;

	public ToDoBusiness(ToDoService doService) {
		this.doService = doService;
	}
	
public List<String> getTodosforHibernate(String user) {
	  
	  List<String> hibernatelist = new ArrayList<String>(); 
	  List<String> Combinedlist = doService.getTodos(user);
	  
	  for(String todo:Combinedlist) { 
		  if(todo.contains("Hibernate"))
		  {
			  hibernatelist.add(todo); 
			  } 
		  } return hibernatelist; 
		 }
	 
public void deleteTodosNotRelatedToHibernate(String user) {
		
		List<String> Combinedlist = doService.getTodos(user);
		
		for(String todos:Combinedlist) {
			if(!todos.contains("Hibernate")) 
			{
				doService.deleteTodos(todos);
			}
		}
	}
 }

步骤3:创建一个名为ToDoBusinessMock的模拟测试以进行测试。在下面的代码中, 我们将使用上面讨论的所有注释。

ToDoBusinessMock.java

import static junit.framework.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ToDoBusinessMock {
	
	@Mock
	ToDoService servicemock;
	
	@InjectMocks
	ToDoBusiness business; 
	
	@Captor
	ArgumentCaptor<String> argumentCaptor;
	
	@Spy
	ArrayList<String> arraylistSpy;
	 
	
	 @Test 
         public void deleteTodosusing_BDD() {
	  
	  // Given 
	  List<String> combinedlist = Arrays.asList("Use Hibernate Java", "Use Hibernate Core", "Use Hibernate", "Use Spring MVC");
	 
	  given(servicemock.getTodos("dummy")).willReturn(combinedlist);
	  
	  arraylistSpy.add("Mockito1");
	  arraylistSpy.add("Mockito2");
	  
	  // When 
	  business.deleteTodosNotRelatedToHibernate("dummy");
	  
	  // Then 
	  verify(arraylistSpy).add("Mockito1");
	  verify(arraylistSpy).add("Mockito2");
	  verify(servicemock, times(1)).deleteTodos("Use Spring MVC");
	  verify(servicemock, never()).deleteTodos("Use Hibernate Java");
	  verify(servicemock, never()).deleteTodos("Use Hibernate");
	  
	  assertEquals(2, arraylistSpy.size());
	  System.out.println("test is working..");
	 }
	 
	  @Test 
	  public void deleteTodosusing_BDD_usingArgumentCaptor() {
	 
	  //Given 
	  List<String> combinedlist = Arrays.asList("Use Hibernate Java", "Use Hibernate Core", "Use Hibernate", "Use Spring MVC");
	  
	  given(servicemock.getTodos("dummy")).willReturn(combinedlist);
	  
	  //When 
	  business.deleteTodosNotRelatedToHibernate("dummy");
	  
	  //Then
	  then(servicemock).should().deleteTodos(argumentCaptor.capture());
	  assertThat(argumentCaptor.getValue(), is("Use Spring MVC"));
	  System.out.println("test is working..");
	 }
 }

输出如下

以下输出显示使用Mockito批注成功运行了测试。

Mockito注解用法示例

赞(0)
未经允许不得转载:srcmini » Mockito注解用法示例

评论 抢沙发

评论前必须登录!