Junit入门到掌握-23-JUnit扩展-模拟Mock

前面一篇简单了介绍了测试桩Stub的概念和举例,和测试桩同级还有一个叫驱动桩,这些都属于TDD技术,也就是测试驱动开发的简称。今天来介绍TDD里面的一个测试技术,叫Mock,就是模拟的意思。现在Mock技术已经在单元测试,集成测试和接口测试,性能测试都能看到。我们这边介绍Java语言中基于Junit的单元测试的mock, 有一个jar包叫JMock。

 

1.Jmock

搜先,单词Mock(和mark发音是一样,别读moke),J就是Java语言了。这个工具的官方网站是http://jmock.org

官方文档教程是http://jmock.org/cookbook.html

本文只是一个小练习,学习了并不表示会用Jmock,还是需要花时间去详细了解Jmock技术,例如看上面的文档。

 

2.Jmock安装

在项目的pom.xml添加以下依赖

<dependencies>
    
  	<dependency>
    	<groupId>org.jmock</groupId>
    	<artifactId>jmock</artifactId>
    	<version>2.12.0</version>
    	<scope>test</scope>
	</dependency>
  
  </dependencies>

 

3.用例练习

还是前面我们Stub这个项目,我们这里不使用Stub,而是通过Mock出来一个虚拟的Notifier对象,下面是测试用例。

        private TrackingService ts;
        @Test
	public void whenGoalIsMetHistoryIsUpdate() throws InvalidGoalException {
		
		Mockery context = new Mockery();
		final Notifier mockNotifier = context.mock(Notifier.class);
		ts = new TrackingService(mockNotifier);
	    context.checking(new Expectations() {{
	    		oneOf (mockNotifier).send("goal met");
	    		will(returnValue(true));
	    }});
		
		ts.setGoal(5);
		ts.addProtein(6);
		// 这种条件触发了Notifier 发送消息功能
		HistoryItem result = ts.getHistory().get(1); //取第二个数据
		assertEquals("send: goal met", result.getOperation());
	}

这个用例是运行成功,上面代码大致意思是先创建一个Mock对象context,然后mock出来一个Notifier类型对象,checking是检查的意思,新建一组期望的行为或者动作,这些行为都是mock出来,也就是虚拟的。然后下面代码得以继续运行下去。

 

总结来说:Mock技术要比Stub技术更加使用广泛一点,这个你从搜索资料就可以看得出来。Mock技术不关在单元测试使用,还有在实际开发,接口测试开发中也使用mock技术。

 

关于Junit的扩展部分就写到这里,其实我博客之前Java+Selenium写自动化测试用例,是采用TestNG框架,JUnit也是可以做到,从目前来看,Junit可能稍微差一点就在于测试报告这块,你看看单元测试中代码覆盖率的html报告,简直没法看。如果用Junit来运行selenium来做测试,报告这块,我不知道有什么好插件可以支持。

如果后期需要更新这个系列,可能会更新如何使用SonarQube,和在Jenkins上做持续集成这块,毕竟SonarQube是一个支持多语言的静态代码扫描工具,这个代码扫描还是属于单元测试和代码覆盖率这块的范畴。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值