JUnit规则
在以上示例中, 我们使用了JUnit运行器(MockitoJUnitRunner)。它使测试依赖于该特定跑步者。
我们不能在同一测试中使用多个跑步者。为克服此问题, 我们应遵循使测试更加灵活的JUnit规则。它允许我们在同一测试中使用多个规则。
JUnit规则被定义为用于阻塞测试方法调用的组件, 并允许我们在调用测试方法之前和之后执行某些操作。 JUnit提供以下规则:
- 创建运行测试方法后删除的目录/文件。
- 如果在调用测试方法之前超过了所描述的超时, 则使测试失败。
- 在调用测试方法之前, 请建立一个外部资源, 例如套接字或数据库连接。
- 调用测试方法后, 释放配置的外部资源。
@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)成功运行了测试。
文章图片
推荐阅读
- ES6版本详细介绍
- 人工神经网络的历史
- ES6语法详细介绍和示例
- ANN玻尔兹曼机
- 关联内存网络
- ES6教程入门介绍
- App自动化测试探索借助Appium实现APP的自动化测试
- Android-Xml,PullParser,解析
- Android开发(Service和Thread的关系)