栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

后悔没有早知道,即使不懂单元测试,会用这个工具也够了~

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后悔没有早知道,即使不懂单元测试,会用这个工具也够了~

Mockito学习

Mockito是一个强大的用于Java开发的模拟测试框架,通过Mockito我们可以创建和配置Mock对象,进而简化有外部依赖的类的测试。可以不进行外部依赖,快速进行Java的单元测试的进行。

Mock 模拟

Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

Mockito好处

无手写 : 无需自己编写模拟对象。

重构安全 : 重命名接口方法名称或重新排序参数不会破坏测试代码,因为Mocks是在运行时创建的。

返回值支持 : 支持返回值
异常支持 : 支持例外
订单检查支持 : 支持检查方法调用的顺序
注释支持 : 支持使用注释创建模拟

Mockito集成

引入依赖


            org.mockito
            mockito-core
            3.3.3
            test
        

Mockito的使用

初始化

@Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

或者:

//引入依赖
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
}

注解

@Mock

用于模拟对象,有助于减少重复模拟对象。

注意:@Mock注释始终与@RunWith注释一起使用。

@RunWith

这是一个类级别的注释,它用于保持测试干净并改善调试,它还会检测测试中可用的未使用的存根,并使用@Mock注释对模拟进行初始化。

@InjectMocks

它标记应在其上执行注入的字段或参数。

@Captor

它允许创建字段级参数捕获器,它与Mockito的verify()方法一起使用, 以获取调用方法时传递的值。

@Spy

允许创建部分模拟的对象,换句话说,它允许将现场实例快速包装在测试对象中。

创建一个实例

package com.example.sl.demospringboot;


import com.example.sl.demospringboot.dao.UserMapper;
import com.example.sl.demospringboot.model.User;
import com.example.sl.demospringboot.service.UserService;
import com.example.sl.demospringboot.service.UserServiceImpl;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.*;
import org.mockito.junit.MockitoJUnitRunner;


import java.util.List;
import java.util.Map;


import static org.mockito.Mockito.*;


//引入依赖
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {


    //初始化Mokc注解对象或者@RunWith(MockitoJUnitRunner.class)
//    @Before
//    public void initMocks() {
//        MockitoAnnotations.initMocks(this);
//    }
    //模拟一个对象
    @Mock
    private Map map;




    @InjectMocks
    private UserServiceImpl userServicei;
    @Mock
    private UserService userService;


    @Mock
    private UserMapper userMapper;


    @Test
    public void test1(){
        User user=mock(User.class);
        when(user.getUsername()).thenReturn("快乐");
        //当调用user.getUsername()返回“快乐”
        Assert.assertEquals("快乐",user.getUsername());
        Assert.assertTrue(map instanceof Map);
        //当调用user.getUsername()抛空指针
        Mockito.doThrow(new NullPointerException()).when(user.getUsername());
        //当调用user的时候什么事情也不用做
        Mockito.doNothing().when(user);
        map.size();
        //verify检测方法调用,这表明size方法调用一次
        verify(map,times(1)).size();
    }
    
    @Test
    public  void  testGetParam(){
        String param="我是一个参数";
        //模拟一个List对象
        List listO=Mockito.mock(List.class);
        ArgumentCaptor paramObject = ArgumentCaptor.forClass(String.class);//捕获参数的对象


        listO.add(param);//mock对象执行add方法,将test添加进其中


        verify(listO).add(paramObject.capture());//捕获参数


        Assert.assertEquals("我是一个参数", paramObject.getValue());//断言验证


    }
    
    @Test
    public void testGetUser(){
        User user=new User();
        user.setAge(1);
        //调用方法返回一个实体
        when(userServicei.findUser()).thenReturn(user);
       // System.out.println("userService.findUser().getAge() = " + userServicei.findUser().getAge());
        Assert.assertEquals("1",userServicei.findUser().getAge()+"");
        verify(userMapper).getUser();
    }
    
    @Test(timeout = 1000)
    public void testInterface() throws InterruptedException {
        User user=new User();
        user.setUsername("test");
        //调用userService.findUser()返回一个usaer
        when(userService.findUser()).thenReturn(user);
        Assert.assertEquals("test",userService.findUser().getUsername());
        //验证执行几次
        verify(userService).findUser();
    }
}

注意

@InjectMocks创建一个实例,也就是一个包含注入接口或者其他bean的一个对象。

@Mock是一个实例里面的一个注入对象,对应的是spring的一个bean。

最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

点击文末小卡片领取

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

自学推荐B站视频:

零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008811.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号