verify(mockUserService).hasMatchUser(“tom”, “1234”);
verify(mockUserService).registerUser(u);
}
同常主要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年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
上软件测试开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-BdR0Nciv-1712753287997)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!