`

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

阅读更多

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 );
    }
}
分享到:
评论

相关推荐

    spring集成TestNG与Mockito框架单元测试方法

    Mockito是一个流行的Java模拟框架,它允许你在测试中隔离依赖,专注于被测试代码的行为。在你的项目中引入Mockito依赖: ```xml &lt;groupId&gt;org.mockito &lt;artifactId&gt;mockito-core &lt;version&gt;4.2.0 &lt;scope&gt;test ...

    PowerMock+Mockito-junit测试套件1.6.3版本

    Mockito是一个流行的Java单元测试框架,它提供了创建和配置mock对象的能力。Mockito的主要特点是它的简单性和易用性,允许开发者以一种声明式的方式定义期望行为。 1. **Mock对象创建**:Mockito可以轻松地创建mock...

    Java mockito单元测试实现过程解析

    Mockito 是一个流行的 Java 测试框架,它使得单元测试更加容易,特别是当处理依赖于其他组件或服务的代码时。本篇文章将深入解析如何使用 Mockito 实现 Java 单元测试。 首先,让我们看一个简单的例子,有一个名为 ...

    Mockito+junit5搞定单元测试

    - Mockito 是一个模拟框架,它允许我们在测试中替换复杂的依赖,以专注于被测试代码的行为,而不是依赖的实现。 - `@InjectMocks` 注解用于创建待测试类的实例,Mockito 会自动注入模拟对象。 - `@Mock` 注解创建...

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架

    Jmockdata是一款专为Java开发设计的测试工具,它的主要功能是模拟Java类型或对象的实例化,并能够自动地对这些对象进行随机数据的初始化。这在进行单元测试时尤其有用,因为它允许开发者创建虚拟的、含有随机数据的...

    Junit4.12+mockito

    **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)、参数化测试、定时器、测试规则等。JUnit 4.12.jar文件使得开发者可以编写简洁且易于理解的测试代码,通过断言...

    Junit 单元测试完整案例

    2. 使用Mockito:Mockito是一个流行的Java模拟框架,可以帮助我们模拟依赖,使测试更隔离。 3. `struts2-junit-plugin`:Struts2提供了JUnit插件,可以简化Struts2应用的测试,允许直接调用Action方法进行测试。 4...

    mockito以及mockMVC的一些使用案例

    Mockito是一款强大的Java模拟框架,它允许开发者在单元测试中创建和配置模拟对象,以隔离被测试代码并控制其行为。通过模拟,我们可以测试代码在特定条件下的行为,而不必依赖真实环境中的外部依赖。Mockito提供了...

    java web接口开发demo

    【Java Web接口开发】是Web应用程序开发中的一个重要环节,它允许不同的系统或客户端通过网络进行数据交互。在Java世界中,实现Web接口通常涉及到Servlet、JSP、Spring MVC或者RESTful API等技术。本示例"java web...

    基于TestNG+Mockito及自动装配注解的Spring MVC集成测试

    Mockito是一个流行的Java单元测试框架,用于创建和管理模拟对象(mock objects)。在集成测试中,我们可能不希望依赖于真实的数据库或外部服务,这时Mockito可以帮助我们模拟这些依赖,以便专注于测试目标代码的行为...

    PowerMock是一个Java框架能够允许你单元测试通常被视为不可测试的代码

    PowerMock是一个强大的Java框架,它的主要目标是使得那些在传统单元测试中难以或者无法测试的代码变得可测试。这个框架扩展了诸如Mockito等其他流行的模拟库的功能,使其能够处理更复杂的模拟场景。在传统的单元测试...

    Java防沉迷实名认证系统接口测试代码(全示例通过)

    在`Maven`项目中,`maven02`可能是项目的源码目录或者一个模块,`Maven`是Java开发的一个项目管理工具,它帮助开发者管理依赖、构建项目、执行测试以及发布应用程序。通过使用`Maven`,我们可以方便地配置、构建和...

    Packt Publishing Mastering Unit Testing Using Mockito and JUnit (2014)

    - **JUnit 4++**:一个扩展库,提供了更多的测试工具和功能。 - **忽略测试**:使用 `@Ignore` 注解可以跳过某些测试,避免它们被意外执行。 - **顺序执行测试**:通过 `@FixMethodOrder(MethodSorters.NAME_...

    基于java语言,ssm框架开发网络商城.zip

    综上所述,基于Java的SSM框架开发的网络商城项目是一个涵盖多个技术领域、全面实践MVC设计模式的综合实例。通过这个项目,开发者可以深入理解SSM框架的工作原理,并提升在Web开发领域的专业技能。

    mockito-sample:在JUnit测试用例中如何使用Mockito创建模拟对象的快速示例

    Mockito 是一个模拟框架,它允许我们在测试中替换真实依赖,以减少复杂性和外部影响。Mockito 提供了以下核心概念: 1. **Mock 对象**:模拟对象是原始类的一个实例,但它的行为是可以预定义的。在测试中,我们可以...

    Practical-Unit-Testing-with-TestNG-and-Mockito_examples

    Mockito是一个Java单元测试框架,用于创建和配置模拟对象(mocks),帮助我们隔离被测试代码,只关注单个组件的行为。Mockito的核心概念包括模拟对象、期望行为和验证。 1. 模拟对象 - Mock:完全模拟对象,不会...

    J2EE企业应用测试源代码.

    5. Mockito:用于Java的模拟框架,帮助开发者在单元测试中隔离依赖,以测试代码的特定部分。 6. Postman:API测试工具,方便测试和调试RESTful web服务。 7. Arquillian:一个针对Java EE容器的集成测试平台,可以...

    使用mockito玩转junit test

    Mockito则是一个强大的模拟框架,它允许我们在测试中创建和配置模拟对象,以便隔离被测试代码并专注于测试单个行为。本教程将深入探讨如何使用Mockito与JUnit结合,来提升我们的测试能力。 首先,了解Mockito的基本...

    mockito单元测试

    Mockito是一个广泛使用的Java Mock框架,它允许开发者轻松地创建Mock对象,以便在单元测试中模拟依赖组件的行为。与传统的Mock工具(如EasyMock)相比,Mockito更加直观且易于使用。Mockito的一个显著特点是支持对...

    Mockito Cookbook - Packt

    - **定义**:Mockito是一款Java测试框架,用于轻松创建被测系统的协作者(即与被测对象交互的对象)的模拟对象(mocks)。通过这些模拟对象可以更好地在隔离环境下模拟软件的行为模式,并快速地从测试中获得反馈。 -...

Global site tag (gtag.js) - Google Analytics