Mockito JUnit规则

JUnit规则 在以上示例中, 我们使用了JUnit运行器(MockitoJUnitRunner)。它使测试依赖于该特定跑步者。
我们不能在同一测试中使用多个跑步者。为克服此问题, 我们应遵循使测试更加灵活的JUnit规则。它允许我们在同一测试中使用多个规则。
JUnit规则被定义为用于阻塞测试方法调用的组件, 并允许我们在调用测试方法之前和之后执行某些操作。 JUnit提供以下规则:

  • 创建运行测试方法后删除的目录/文件。
  • 如果在调用测试方法之前超过了所描述的超时, 则使测试失败。
  • 在调用测试方法之前, 请建立一个外部资源, 例如套接字或数据库连接。
  • 调用测试方法后, 释放配置的外部资源。
要使用JUnit规则, 我们需要在测试中添加@Rule批注。
@Rule:注释字段。它指的是返回规则的规则或方法。带注释的字段必须是公共的, 非静态的以及TestRule或MethodRule的子类型。
@Rulepublic 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"); //Thenthen(servicemock).should().deleteTodos(argumentCaptor.capture()); assertThat(argumentCaptor.getValue(), is("Use Spring MVC")); System.out.println("test is working.."); } }

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

文章图片

    推荐阅读