文档: http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html
1、测试 void 方法
@Autowired private JdbcTemplate jdbcTemplate; public static final String DELETE_INSTANCE_RELY_BY_TASK = " DELETE FROM tb_instance_rely_rel " + "WHERE task_id=? AND instance_id IN ( SELECT c.instance_id FROM " + "(SELECT task_id FROM tb_task WHERE task_id=? )a JOIN tb_data_version b " + " ON a.task_id = " + " b.task_id JOIN tb_instance c ON b.version_id = c.version_id WHERE c.state=? )"; @Override public void deleteInitializedInstanceRelyByTask(long taskId, long upTaskId) { final Object[] args = { upTaskId, taskId, InstanceState.INITIALIZED.getValue() }; LOGGER.debug(Tools.getSqlArgsString(DELETE_INSTANCE_RELY_BY_TASK, args)); jdbcTemplate.update(DELETE_INSTANCE_RELY_BY_TASK, args); }
测试代码片段:
private JdbcTemplate jdbcTemplate; private InstanceRelyRelDaoImpl impl; private long taskId = 100L; private long upTaskId = 101L; @Before public void before() { jdbcTemplate = mock(JdbcTemplate.class); impl = new InstanceRelyRelDaoImpl(); Whitebox.setInternalState(impl, "jdbcTemplate", jdbcTemplate); } public void testDeleteInitializedInstanceRelyByTask() { impl.deleteInitializedInstanceRelyByTask(taskId, upTaskId); Object[] args = { upTaskId, taskId, InstanceState.INITIALIZED.getValue() }; Mockito.verify(jdbcTemplate).update(InstanceRelyRelDaoImpl.DELETE_INSTANCE_RELY_BY_TASK, args); }
2、测试static 静态方法
import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.support.KeyHolder; import java.util.Date; @RunWith(PowerMockRunner.class) // mock静态方法,必须有 @PrepareForTest({ Utils.class }) // mock静态方法,必须有 public class EntitySubscribeFlowDaoImplTest { private EntitySubscribeFlowDaoImpl impl; private JdbcTemplate jdbcTemplate; @Before public void before() { impl = new EntitySubscribeFlowDaoImpl(); jdbcTemplate = mock(JdbcTemplate.class); Whitebox.setInternalState(impl, "jdbcTemplate", jdbcTemplate); } /** * Test method */ @Test public void testAddEntitySubscribeFlow() { try { impl.addEntitySubscribeFlow(null); fail(); } catch (Exception e) { assertTrue(true); } try { EntitySubscribeFlow flow = new EntitySubscribeFlow(); KeyHolder keyHolder = mock(KeyHolder.class); mockStatic(Utils.class); // mock静态方法,必须有 when(Utils.createKeyHolder()).thenReturn(keyHolder); // mock静态方法,必须有 when(keyHolder.getKey()).thenReturn(10L); long id = impl.addEntitySubscribeFlow(flow); Mockito.verify(jdbcTemplate).update(Mockito.any(PreparedStatementCreator.class), Mockito.any(KeyHolder.class)); System.err.println("================= " + id); } catch (Exception e) { e.printStackTrace(); fail(); } } }
3、mock 掉方法中的 private 私有方法
参考地址: http://automationrhapsody.com/mock-private-method-call-powermock/
public class PowerMockDemo { public Point callPrivateMethod() { return privateMethod(new Point(1, 1)); } private Point privateMethod(Point point) { return new Point(point.getX() + 1, point.getY() + 1); } }
import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.mock; @RunWith(PowerMockRunner.class) @PrepareForTest(PowerMockDemo.class) public class PowerMockDemoTest { private PowerMockDemo powerMockDemoSpy; @Before public void setUp() { powerMockDemoSpy = PowerMockito.spy(new PowerMockDemo()); } @Test public void testMockPrivateMethod() throws Exception { Point mockPoint = mock(Point.class); PowerMockito.doReturn(mockPoint) .when(powerMockDemoSpy, "privateMethod", anyObject()); Point actualMockPoint = powerMockDemoSpy.callPrivateMethod(); assertThat(actualMockPoint, is(mockPoint)); } }
或者
@Test public void testCompose() { Train train = new Train(); Train trainSpy = Mockito.spy(train); //notice different Mockito syntax for spy Mockito.doReturn(TESTING_WAGON_COUNT).when(trainSpy).getWagonsCount(); Mockito.doNothing().when(trainSpy).addWagon(0); // invoke testing method int actualWagonCount = trainSpy.compose(); Assert.assertEquals(actualWagonCount, TESTING_WAGON_COUNT); Mockito.verify(trainSpy, Mockito.times(TESTING_WAGON_COUNT)) .addWagon(0); }
网上找的的一些其他人的例子:
参考地址: http://chenjingbo.iteye.com/blog/1696488
@Test public void testCreateMarketingDetail() throws Exception { PowerMockito.doReturn(marketingDetail).when(internalMarketingBuilder,"createMarketingDetail",marketingActivity); Assert.assertTrue(umpDetailManager.createMarketingDetail(marketingActivity).getDetailId() == detailId); } @Test(expected = ManagerException.class) public void testCreateMarketingDetail_Exception() throws Exception { PowerMockito.doThrow(new RuntimeException("test")).when(internalMarketingBuilder, "createMarketingDetail", marketingActivity); Assert.assertTrue(umpDetailManager.createMarketingDetail(marketingActivity).getDetailId() == detailId); } @Test(expected = ManagerException.class) public void testCreateMarketingDetail_Exception2() throws Exception { umpDetailManager.createMarketingDetail(null); } @Test public void testAddMarketingDetail() throws Exception { PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail); PowerMockito.doReturn(prepareResultSupport()).when(marketingActivityTopServiceClient,"addMarketingDetail",activityId,content,sellerId); Assert.assertEquals(umpDetailManager.addMarketingDetail(activityId,marketingDetail,sellerId).getDefaultModel(),detailId); } @Test(expected = ManagerException.class) public void testAddMarketingDetail_Exception() throws Exception { PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail); PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"addMarketingDetail",activityId,content,sellerId); umpDetailManager.addMarketingDetail(activityId,marketingDetail,sellerId); } @Test public void testDeleteMarketingDetail() throws Exception { PowerMockito.doReturn(prepareResultSupport2()).when(marketingActivityTopServiceClient,"deleteMarketingDetail",detailId,sellerId); Assert.assertFalse(umpDetailManager.deleteMarketingDetail(detailId,sellerId).isSuccess()); } @Test(expected = ManagerException.class) public void testDeleteMarketingDetail_Exception() throws Exception { PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"deleteMarketingDetail",detailId,sellerId); Assert.assertFalse(umpDetailManager.deleteMarketingDetail(detailId,sellerId).isSuccess()); } @Test public void testUpdateMarketingActivityDetail() throws Exception { PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail); PowerMockito.doReturn(prepareResultSupport2()).when(marketingActivityTopServiceClient,"updateMarketingDetail",detailId,content,sellerId); Assert.assertFalse(umpDetailManager.updateMarketingActivityDetail(detailId,marketingDetail,sellerId).isSuccess()); } @Test(expected = ManagerException.class) public void testUpdateMarketingActivityDetail_Exception() throws Exception { PowerMockito.doReturn(content).when(internalMarketingBuilder,"build",marketingDetail); PowerMockito.doThrow(new RuntimeException("test")).when(marketingActivityTopServiceClient,"updateMarketingDetail",detailId,content,sellerId); Assert.assertFalse(umpDetailManager.updateMarketingActivityDetail(detailId,marketingDetail,sellerId).isSuccess()); }
相关推荐
白色大气风格的建筑商业网站模板下载.rar
内容概要:本文详细介绍了面向对象编程语言Objective-C的基础语法,包括其历史背景、特点、环境搭建、基本语法、面向对象编程、高级特性和实际应用。具体涵盖的内容包括Objective-C的历史发展、面向对象编程的核心特性、变量和数据类型、控制结构、函数、数组和字典的使用,以及类、对象、属性和方法的定义与使用。此外,还介绍了高级特性如协议和委托、类别和扩展、ARC、块和GCD。最后,通过示例项目展示了如何在Xcode中创建和调试Objective-C程序,以及如何使用Cocoa和Cocoa Touch框架。 适合人群:具备一定的编程基础,希望学习或深入了解Objective-C编程的开发人员。 使用场景及目标:适用于需要开发macOS和iOS应用的开发者,帮助他们掌握Objective-C的基本语法和高级特性,提高编程效率和代码质量。 其他说明:本文不仅提供了详细的理论讲解,还通过实际代码示例展示了如何在Xcode中创建和调试Objective-C项目,适合初级到中级水平的开发人员学习和参考。
本次开发的微信小程球馆预约系统,有管理员,用户两个角色。管理员功能有个人中心,用户管理,场地类型管理,球馆信息管理,球馆预约管理,系统管理。用户可以在微信小程序上面注册登录,查看球馆信息,对球馆进行预约操作。 开发本程序后台用到了SSM开发技术,微信端用的是uni-app技术。数据库采用关系数据库市场占有率最高的MySQL作为本程序使用的数据库,完全符合程序使用并且有丰富的拓展余地。 用户在微信小程序注册登录后可以看到首页,首页可以搜索球馆名称,也可以查看球馆资讯,下面是导航栏。 用户点击球馆信息可以进行预约,预约需要输入相关时间等信息。 我的里面可以修改个人信息,可以退出,还可以查看球馆预约信息和我的收藏信息。
1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F030C8T6运行,如果是STM32F030其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、编译时请注意提示,请选择合适的编译器版本。
廖鹏盛 - 时代进行曲.zip
白色大气风格的人体艺术摄影网站模板下载.zip
白色大气风格的服装设计师模板下载.zip
白色大气风格的景观设计HTML网站模板.zip
优质的机器学习资源是当今科技领域的热点,其中TensorFlow作为谷歌公司的开源库,成为最受欢迎的深度学习框架之一,广泛应用于各类项目中。TensorFlow提供了丰富的功能和灵活性,使得开发者可以轻松构建和训练复杂的神经网络模型,处理图像、文本和其他类型的数据。由于其开源性质,拥有庞大的社区支持,用户可以放心使用,并从开源社区中获取宝贵的经验和资源。 mnist数据集是机器学习领域的经典数据集之一。它包含着大量的手写数字图像,供开发者用来训练和测试各种算法和模型。这个数据集的规模相对较小,因此对于绝大多数人来说,无论是数据的下载还是训练过程,都不会对电脑性能提出过高的要求。这使得mnist成为了理想的入门数据集,适合初学者探索和理解机器学习算法的基本原理。 结合Pygame与TensorFlow,你将能够为机器学习实验创建出图形化界面,以及实现交互式处理。Pygame是一款面向游戏和多媒体应用的Python库,但同样也可以用于数据可视化和图形化交互。利用Pygame,你可以展示训练过程中的图像输出、模型的预测结果等,增强对机器学习算法运行情况的直观认识。而且,Pygame的简单。内
基于两种坐标系的超螺旋滑模观测器的永磁同步电机pmsm无位置(速度)传感器控制模型 支持 dq旋转坐标系和静止坐标系建立smo 引入二阶滑模超螺旋算法替代一阶滑模 dq坐标系引入锁相环PLL估计转速及转子位置 有效削弱抖振 赠送超螺旋滑模搭建推导文档及相关参考资料 仿真模型
汇编实验算数运算程序设计.docx
小区监控视频监控方案.doc
白色大气风格的HTML商务模板下载.zip
白色大气风格响应式运动健身瑜伽企业网站模板.zip
单片机实验仿真设计报告
白色大气风格的设计公司整站网站模板下载.zip
白色大气风格的html商务模板.zip
白色大气风格的英文网站模板下载.zip
白色大气风格的科研教育模板下载.zip
本摄像头ov7670驱动程序已经通过本人的验证可以正常运行,不同的stm32开发板只需要修改引脚即可使用