美文网首页
Mockito脱离依赖测试

Mockito脱离依赖测试

作者: JAVA觅音阁 | 来源:发表于2018-04-24 17:57 被阅读117次

Mockito可将依赖部分设置为成功,测试业务流程。如service依赖dao层,mock掉dao层(即假设dao正确返回需要的数据),测试service业务正确性。依赖可扩展为http,mq,redis等依赖。

引入包

<!-- 1.一般引入 -->
<!‐‐ https://mvnrepository.com/artifact/org.mockito/mockito‐all ‐‐>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito‐all</artifactId>
    <version>1.10.19</version>
</dependency>
<!‐‐ https://mvnrepository.com/artifact/junit/junit ‐‐>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<!‐‐ https://mvnrepository.com/artifact/org.assertj/assertj‐core ‐‐>
<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj‐core</artifactId>
    <version>3.5.2</version>
</dependency>

<!-- 2.SpringBoot 引入以下即可 -->
<!‐‐ https://mvnrepository.com/artifact/org.springframework.boot/spring‐boot‐starter‐test ‐‐>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐test</artifactId>
    <version>1.4.3.RELEASE</version>
</dependency>

Mockito注解

不依赖于Spirng容器

  • @InjectMocks:初始化bean,类似于注入。
  • @Mock:忽略bean,mock掉的bean操作被假设为成功,可以设置假设成功时返回的数据。

注:@InjectMocks 和 @Mock 的对象,都不能是 interface,必须是可实例化的 Class

  • @Before:Junit注解,初始化单元测试的环境及参数。
  • @Test:Junit注解,执行单元测试。

初始化mock环境

MockitoAnnotations.initMocks(this)

前方高能,有码区域

// 待测试层bean
@InjectMocks
private MyService myService;

// mock层bean,模拟数据并认为该操作成功
@Mock
private MyDao myDao;

//模拟数据-某个方法的请求参数
private MyRequest myRequest;
//模拟数据-某个方法的响应参数
private MyResponse myResponse;

// 初始化mock环境和数据
@Before
public void initEnv(){
    // 初始化mock环境
    MockitoAnnotations.initMocks(this);
    //初始化请求参数
    myRequest = new MyRequest();
    myRequest.setUserName("xName");
    myRequest.setPassword("xPass");
    //初始化响应参数
    myResponse = new MyResponse();
    myResponse.setMsg("请求成功");
    myResponse.setUserId("xUID");
}

// 单元测试
@Test
public void myServiceTest(){
    //Mock掉MyDao中的checkUser(MyRequest)方法:当调用 myDao.checkUser(MyRequest)方法时,设置返回myResponse
    Mockito.when(myDao.checkUser(Mockito.any(MyRequest.class))).thenReturn(myResponse);

    //Mock MyDao中的insertLog(UserLog)方法:当调用 **void** myDao.insertLog(UserLog) 方法时,不做任何事情
    Mockito.doNothing().when(myDao).insertLog(Mockito.any(UserLog.class));

    //调用被测试方法
    //myService.getUser(myRequest)方法中会执行 myDao.getUser(myRequest) 和 myDao.insertLog(userLog) 方法,这两个方法都已经被 Mock了

    XxResponse xxResponse = myService.getUser(myRequest);
    //断言响应不为空   
    assertThat(xxResponse).isNotNull();
}

相关文章

网友评论

      本文标题:Mockito脱离依赖测试

      本文链接:https://www.haomeiwen.com/subject/pdojlftx.html