Mockito教程-简单使用

概述

mock的概念

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

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

Mockito 框架

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

实战

一.maven依赖

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.10.19</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</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<User> personCaptor = ArgumentCaptor.forClass(User.class);
        verify(userDao).update( personCaptor.capture() );
        User updatedUser = personCaptor.getValue();

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

参考资料

http://mockito.org/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mockito 是一个 Java 测试框架,用于模拟(mock)依赖项并使测试代码更简单和可读。它可以帮助您快速创建假的对象和模拟方法的行为。以下是 Mockito使用教程和示例。 ### 安装 Mockito使用 Mockito 之前,您需要将其添加到您的项目中。如果您使用 Maven,则可以将以下依赖项添加到您的 pom.xml 文件中: ```xml <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.3.3</version> <scope>test</scope> </dependency> ``` 如果您使用 Gradle,则可以将以下依赖项添加到您的 build.gradle 文件中: ``` testImplementation 'org.mockito:mockito-core:3.3.3' ``` ### 创建 Mock 对象 要创建 Mock 对象,您可以使用 Mockito 的 `Mockito.mock()` 方法。该方法接受一个 Class 类型的参数,并返回一个空的 Mock 对象。例如,要为一个名为 `UserService` 的类创建 Mock 对象,您可以编写以下代码: ```java UserService userService = Mockito.mock(UserService.class); ``` ### 设置 Mock 对象的行为 创建 Mock 对象之后,您可以使用 Mockito 的 `when()` 方法设置 Mock 对象的行为。该方法接受一个方法调用,并返回一个 `Mockito.when()` 对象,您可以使用该对象设置方法调用的返回值。例如,要设置 `UserService` 类的 `getUserById()` 方法调用返回一个名为 `John` 的用户,您可以编写以下代码: ```java User john = new User("John"); when(userService.getUserById(1)).thenReturn(john); ``` ### 验证 Mock 对象的方法调用 Mockito 还提供了一种验证 Mock 对象的方法调用的方法。要验证方法调用,您可以使用 Mockito 的 `verify()` 方法。该方法接受一个 Mock 对象和一个方法调用,并验证该方法是否被调用。例如,要验证 `UserService` 类的 `getUserById()` 方法是否被调用,您可以编写以下代码: ```java verify(userService).getUserById(1); ``` ### 完整示例 下面是一个完整的 Mockito 示例。在这个例子中,我们将创建一个名为 `UserServiceTest` 的测试类,并使用 Mockito 创建一个名为 `userService` 的 Mock 对象。然后,我们将设置 `userService` 的 `getUserById()` 方法调用返回一个名为 `John` 的用户。最后,我们将使用 Mockito 验证 `userService` 的 `getUserById()` 方法是否被调用。 ```java import org.junit.Test; import org.mockito.Mockito; import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; public class UserServiceTest { @Test public void testGetUserById() { // Create the mock object UserService userService = Mockito.mock(UserService.class); // Set the mock object's behavior User john = new User("John"); when(userService.getUserById(1)).thenReturn(john); // Call the method being tested User user = userService.getUserById(1); // Verify the method was called verify(userService).getUserById(1); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值