当前位置:首页 > 开发 > 编程语言 > Java > 正文

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

发表于: 2013-12-09   作者:bijian1013   来源:转载   浏览:
摘要: Mockito框架:         Mockito是一个基于MIT协议的开源java测试框架。         Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为。对于mock对象的一个评价是测试系统的测

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 );
    }
}

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,这对项目经理,QA,tester 来说 无疑是
准备 本文需要Java和Junit基础,可参考:使用Junit进行单元测试教程,Java程序设计简介。 项目地址
  Cardinal 是一个适用于移动项目的 CSS 框架,包含很多有用的默认样式、矢量字体、可重用的模块
一个强大的工具来模拟数百万​​并发用户负载测试:Gryphon    Gryphon是由网易自主研发的能够模
这几天一直在自学捣鼓SSH,所遇到的问题很多,自己也总结了不少,废了一些功夫,写的一个连接MySQL
一种新的界面测试框架发布了,名为White。White与WatiN类似,它封装了微软的UIAutomation库和Window
一种新的界面测试框架发布了,名为White。White与WatiN类似,它封装了微软的UIAutomation库和Window
A Linux Distribution Engineered for Penetration Testing 一个专用于渗透测试的Linux发行 posted
这是我在从事网站自动化测试的工作当中构建出的一个“生态系统”。“生态系统”这个概念是我从公司
一个用于网站自动化测试的生态系统实现   这是我在从事网站 自动化测试的 工作当中构建出的一个“
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号