Mockito框架提供了各种注释, 以使代码简单易懂。而且, 它减少了有助于集中精力于业务逻辑的代码行。在Mockito中, 当我们想在不同位置使用模拟对象以避免多次调用相同方法时, 注释很有用。
Mockito注释如下:
- @Mock:用于模拟对象, 有助于最大程度地减少重复的模拟对象。由于参数名称(字段名称)用于标识模拟, 因此它使测试代码和验证错误更易于阅读。 @Mock批注在org.mockito包中可用。
以下代码段显示了如何使用@mock批注:
@MockToDoService servicemock;
注意:@Mock注释始终与@RunWith注释一起使用。
- @RunWith:这是一个类级别的注释。它用于保持测试干净并改善调试。它还会检测测试中可用的未使用的存根, 并使用@Mock注释对模拟进行初始化。 @RunWith批注在org.mockito.junit包中可用。
以下代码段显示了如何使用@RunWith批注:
@RunWith(MockitoJUnitRunner.class)public class ToDoBusinessMock {.....}
在上面的代码片段中, MockitoJUnitRunner类用于检查是否创建了所有模拟并在需要时自动装配。
- @InjectMocks:它标记应在其上执行注入的字段或参数。它允许速记模拟和间谍注入, 并最大程度地减少重复的模拟和间谍注入。在Mockito中, 通过setter注入, 构造函数注入和属性注入来注入模拟。 @InjectMocks批注在org.mockito包中可用。
以下代码段显示了如何使用@InjectMocks批注:
@InjectMocksToDoBusiness business;
- @Captor:它允许创建字段级参数捕获器。它与Mockito的verify()方法一起使用, 以获取调用方法时传递的值。像其他批注一样, org.mockito包中也提供了@Captor批注。
以下代码段显示了如何使用@Captor批注:
@CaptorArgumentCaptor<
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");
//Thenthen(servicemock).should().deleteTodos(argumentCaptor.capture());
assertThat(argumentCaptor.getValue(), is("Use Spring MVC"));
System.out.println("test is working..");
} }
输出如下
【Mockito注解用法示例】以下输出显示使用Mockito批注成功运行了测试。
文章图片
推荐阅读
- Eclipse IDE中Mockito和JUnit的示例
- Mockito框架教程入门介绍
- 模拟与存根与监控
- Godot中的动画设计实例
- Mockito的方法
- Godot启动屏幕设计实例图解(2)
- Godot中的SceneTree
- Godot启动屏幕设计实例图解
- 设计与控制节点的接口