单元测试——使用Mock

本文介绍了Mock的概念,并详细讲解了Mockito库在单元测试中的应用,帮助开发者更好地理解和使用Mock进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Mock简介

背景:小明和小刚要为app制作一个登陆功能,小明负责网络交互获取服务器的认证数据,小刚负责将获取到的数据写入到数据库中,然后能够使用户自动登陆。小刚的开发的速度比较快,已经完成了数据库互这一块,但是小明的网络交互还没有开发完成。那么小刚怎么测试自己的数据库是否完成呢?小刚就要自己创建一个类,模拟登陆,然后进行测试。
首先创建User类
public class User {
	private String id;
	private String pwd;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", pwd=" + pwd + "]";
	}
}
然后创建数据库存储类UserDao
public class UserDao {
	
	public void saveUserInfo(User user){
		//存储数据
		System.out.println(user);
	}
}
之后创建自己的测试登陆类Login (这就是一个简单的Mock)
public interface ILogin {
	public User login();
}
public  User login(){
	User user = new User();
	ser.setId("1");
	user.setPwd("123");
	return user;
}
最近创建测试类进行测试SaveTest
public class SaveTest extends TestCase{
	private UserDao mUserDao;
	private ILogin mLogin;
	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
		mUserDao = new UserDao();
		mLogin = new LoginImpl();
	}

	public void testSave(){
		mUserDao.saveUserInfo(mLogin.login());
	}
	
	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
		mUserDao = null;
		mLogin = null;
	}
}
根据上面的例子我们可以得出:Mock代表的是 模拟某个类(Login类)的行为。这个类是测试你的模块必不可少的类。(必须得有Login才能调用saveUser()存储User)。
但是如果测试模块需要多个未完成的外部类,那么岂不是需要些很多个Mock。为了简化这个过程,就出现了Mockito库。

二、Mockito的使用

Mockito两个重要的概念
Mock:对象用来判断测试是否能通过,也就是用来验证测试中依赖对象间的交互能否达到预期。
Stub: 完全是模拟一个外部依赖,用来提供测试时所需要的测试数据。(调用盖房只为获取方法的返回值,且该返回值是由自己设定。形式就是调用了方法,没有调用方法的内部实现,然后返回自己设定的返回值)

②、使用
Mock的作用
1、测试对象的行为次数(从未、至少、至多、具体次数)
//设置为静态import
import static org.mockito.Mockito.*;

public class TestMock extends TestCase {
	
	public void testList(){
		//知识点①
		List mockList = mock(List.class);
		//知识点③
		mockList.add("1");
		//知识点②
		verify(mockList,times(2)).add("1");
	}
	
}
①、使用类的Class类创建测试对象,该类可以是接口、或者具体类。因为并非真正的调用该类的真实方法。
②、verify(Object obj,VerficationMode mode):计算该类的方法被调用的次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值