侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Mockito:一个强大的用于 Java 开发的模拟测试框架实例

Java  /  管理员 发布于 3年前   179

Mockito框架:

        Mockito是一个基于MIT协议的开源java测试框架。 
        Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为。对于mock对象的一个评价是测试系统的测试代码是一个高耦合的,由于 Mockito试图通过移除“期望规范”去除expect-run-verify(期望验证模式)的模式,因此在耦合度上有所降低。这样的结果是简化了测试代码,使他更易读和修改了。

 

使用Mockito框架的简单Java代码示例:

1.ClassPerson.java

public class Person{    private final Integer personID;    private final String personName;    public Person( Integer personID, String personName )    {        this.personID = personID;        this.personName = personName;    }    public Integer getPersonID()    {        return personID;    }    public String getPersonName()    {        return personName;    }}

 2.接口类PersonDAO.java

public interface PersonDao {    public Person fetchPerson( Integer personID );    public void update( Person person );}

 3.类PersonService.java

public class PersonService{    private final PersonDao personDao;    public PersonService( PersonDao personDao )    {        this.personDao = personDao;    }    public boolean update( Integer personId, String name )    {        Person person = personDao.fetchPerson( personId );        if( person != null )        {            Person updatedPerson = new Person( person.getPersonID(), name );            personDao.update( updatedPerson );            return true;        }        else        {            return false;        }    }}

 4.单元测试类PersonServiceTest

public class PersonServiceTest{    @Mock    private PersonDao personDAO;    private PersonService personService;    @Before    public void setUp()        throws Exception    {        MockitoAnnotations.initMocks( this );        personService = new PersonService( personDAO );    }    @Test    public void shouldUpdatePersonName()    {        Person person = new Person( 1, "Phillip" );        when( personDAO.fetchPerson( 1 ) ).thenReturn( person );        boolean updated = personService.update( 1, "David" );        assertTrue( updated );        verify( personDAO ).fetchPerson( 1 );        ArgumentCaptor<Person> personCaptor = ArgumentCaptor.forClass( Person.class );        verify( personDAO ).update( personCaptor.capture() );        Person updatedPerson = personCaptor.getValue();        assertEquals( "David", updatedPerson.getPersonName() );        // asserts that during the test, there are no other calls to the mock object.        verifyNoMoreInteractions( personDAO );    }    @Test    public void shouldNotUpdateIfPersonNotFound()    {        when( personDAO.fetchPerson( 1 ) ).thenReturn( null );        boolean updated = personService.update( 1, "David" );        assertFalse( updated );        verify( personDAO ).fetchPerson( 1 );        verifyZeroInteractions( personDAO );        verifyNoMoreInteractions( personDAO );    }}


  • 上一条:
    Java中equals()与hashCode()方法详解
    下一条:
    JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • java正则表达式彻底研究(0个评论)
    • java正则表达式验证函数(0个评论)
    • MVC、MVP和MVVM分别是什么(0个评论)
    • java 单例模式(饿汉模式与懒汉模式)(0个评论)
    • 近期文章
    • 在go语言中使用GoPDF包把html生成PDF文件示例(0个评论)
    • 在go语言中创建和解析(读取)符号链接示例(0个评论)
    • ubuntu 22.04系统中报错:Python 3.6 is no longer supported by the Python core team...解决方式(0个评论)
    • Laravel 10.4版本发布(0个评论)
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-11
    • 2018-03
    • 2020-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客