Mockito教程-简单使用

概述

mock的概念

在软件开发的世界之外, “mock”一词是指模仿或者效仿. 因此可以将“mock”理解为一个替身,替代者. 在软件开发中提及”mock”,通常理解为模拟对象或者Fake.

mock对象就是在调试期间用来作为真实对象的替代品。
mock测试就是在测试过程中,对那些不容易构建的对象用一个虚拟对象来代替测试的方法就叫mock测试。

Mockito 框架

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

实战

一.maven依赖

<dependency>
    <groupId>org.mockitogroupId>
    <artifactId>mockito-allartifactId>
    <version>1.10.19version>
dependency>

<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.12version>
    <scope>testscope>
dependency>

mockito需要junit配合使用。

二、测试步骤

User.java

package com.ricky.codelab.mockito.domain;

public class User {
    private long id;
    private String name;
    private String email;

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", email=" + email + "]";
    }

}

接口UserDao.java

package com.ricky.codelab.mockito.dao;

import com.ricky.codelab.mockito.domain.User;

public interface UserDao {

    public User queryUserByid(long id);

    public int update(User user);
}

UserService .java

package com.ricky.codelab.mockito;

import com.ricky.codelab.mockito.dao.UserDao;
import com.ricky.codelab.mockito.domain.User;

public class UserService {

    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    public boolean update(long id, String name){

        User user = userDao.queryUserByid(id);
        if(user==null){
            return false;
        }
        user.setName(name);
        userDao.update(user);
        return true;
    }
}

测试类UserServiceTest.java

package com.ricky.codelab.demo;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.mockito.Mockito.*;
import com.ricky.codelab.mockito.UserService;
import com.ricky.codelab.mockito.dao.UserDao;
import com.ricky.codelab.mockito.domain.User;

public class UserServiceTest {

    private UserService userService;

    @Mock
    private UserDao userDao;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        userService = new UserService(userDao);
    }

    @Test
    public void testVerify() {
        User user = new User();
        user.setId(1);
        user.setName("ricky");

        when(userDao.queryUserByid(1)).thenReturn(user);
        boolean success = userService.update(1, "Jack");
        Assert.assertEquals(true, success);

        verify(userDao).queryUserByid(1);

        ArgumentCaptor personCaptor = ArgumentCaptor.forClass(User.class);
        verify(userDao).update( personCaptor.capture() );
        User updatedUser = personCaptor.getValue();

        Assert.assertEquals( "Jack", updatedUser.getName());
    }
}

参考资料

http://mockito.org/

你可能感兴趣的:(Test)