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

Mockito JUnit规则

JUnit规则

在以上示例中, 我们使用了JUnit运行器(MockitoJUnitRunner)。它使测试依赖于该特定跑步者。

我们不能在同一测试中使用多个跑步者。为克服此问题, 我们应遵循使测试更加灵活的JUnit规则。它允许我们在同一测试中使用多个规则。

JUnit规则被定义为用于阻塞测试方法调用的组件, 并允许我们在调用测试方法之前和之后执行某些操作。 JUnit提供以下规则:

  • 创建运行测试方法后删除的目录/文件。
  • 如果在调用测试方法之前超过了所描述的超时, 则使测试失败。
  • 在调用测试方法之前, 请建立一个外部资源, 例如套接字或数据库连接。
  • 调用测试方法后, 释放配置的外部资源。

要使用JUnit规则, 我们需要在测试中添加@Rule批注。

@Rule:注释字段。它指的是返回规则的规则或方法。带注释的字段必须是公共的, 非静态的以及TestRule或MethodRule的子类型。

@Rule
public MockitoRule mockitorule = MockitoJUnit.rule();

在上面的代码片段中, 我们使用了MockitoRule类。你可以根据需要使用任何JUnit规则。

JUnit规则(MockitoRule)的示例

在这里, 我们将使用JUnit规则创建一个示例。在此示例中, 我们使用MockitoRule, 并且可以根据你的要求使用任何JUnit规则。

步骤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 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 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.Arrays;
import java.util.List;

import org.junit.Rule;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

public class ToDoBusinessMock {

       @Rule
	public MockitoRule mockitorule = MockitoJUnit.rule();
	
	@Mock
	ToDoService servicemock;
	
	@InjectMocks
	ToDoBusiness business; 
	
	@Captor
	ArgumentCaptor<String> argumentCaptor;
	 
             @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);
	  
	  // When 
	  business.deleteTodosNotRelatedToHibernate("dummy");
	  
	  // Then 
	  verify(servicemock, times(1)).deleteTodos("Use Spring MVC");
	  verify(servicemock, never()).deleteTodos("Use Hibernate Java");
	  verify(servicemock, never()).deleteTodos("Use Hibernate"); 
               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..");
	  }
 }

输出如下

以下输出显示使用JUnit规则(MockitoRule)成功运行了测试。

JUnit规则

赞(0)
未经允许不得转载:srcmini » Mockito JUnit规则

评论 抢沙发

评论前必须登录!