Mockito注解用法示例

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批注成功运行了测试。
Mockito注解用法示例

文章图片

    推荐阅读