单元测试中使用Mockito模拟对象,2024年最新【深夜思考

verify(mockUserService).hasMatchUser(“tom”, “1234”);

verify(mockUserService).registerUser(u);

}

对Service层进行单元测试


同常主要Java Web应用分Controller,Service,DAO基本三层来进行开发。

接下来通过使用Mockito框架对Service进单元测试。

Domain领域对象:

public class Product {

}

DAO数据连接层:

public interface ProductDao {

int getAvailableProducts(Product product);

int orderProduct(Product product, int orderedQuantity);

}

Service业务逻辑层:

public class ProductService {

private ProductDao productDao;

public boolean buy(Product product, int orderedQuantity) {

int availableQuantity = productDao.getAvailableProducts(product);

if (orderedQuantity > availableQuantity) {

return false;

}

productDao.orderProduct(product, orderedQuantity);

return true;

}

}

Service测试用例:

public class ProductServiceTest {

private ProductDao productDao;

@Before

public void setupMock() {

//模拟Dao层

productDao = mock(ProductDao.class);

}

@Test

public void testBuy() {

int availableQuantity = 30;

Product product = new Product();

ProductService productService = new ProductService();

//设置数据桩

when(productDao.getAvailableProducts(product)).thenReturn(availableQuantity);

//doReturn(availableQuantity).when(productDao).getAvailableProducts(product);

//这写法不行

//doReturn(availableQuantity).when(productDao.getAvailableProducts(product));

//通过Spring测试框架提供的工具类为目标对象私有属性设值,这样就不用ProductDao另建setProductDao()方法

ReflectionTestUtils.setField(productService, “productDao”, productDao);

Assert.assertFalse(productService.buy(product, 31));

Assert.assertTrue(productService.buy(product, 3));

//验证交互行为

verify(productDao).orderProduct(product, 3);

verify(productDao, times(2)).getAvailableProducts(product);

}

}

测试用例中,用到Spring test框架的ReflectionTestUtils,它可以为目标对象非公有属性设值,或调用非公有setter方法,方便测试过程中使用。

为了使用ReflectionTestUtils,需要向pom.xml添加下面的依赖

org.springframework

spring-test

3.0.5.RELEASE

test

org.springframework

spring-core

3.0.5.RELEASE

test

commons-logging

commons-logging

1.2

test

总结


本文介绍了Mockito的基本用法,以及通过它Mock对象对Service层辅助测试用例。在Mockito辅助下,单元测试变得如虎添翼啊!

在编写代码过程中,必须反复调试它,保证他顺利通过。虽代码通过编译,只是说明其语法正确,但不能保证其语义也正确。没有任何人可以轻易承诺这段代码的行为一定是正确的。幸运的是,单元测试会为我们的承诺作出保证。编写单元测试就是用来验证这段代码的行为是否与我们期望的一样。有了单元测试,我们可以自信地交付自己的代码,减少后顾之忧。

引用


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

上软件测试开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-BdR0Nciv-1712753287997)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值