云开发日记------junit+mockito单元测试

说到单元测试真的很让人抓狂,先说说我理解的单元测试的好处:

1.帮助自己整理代码的结构,更加清楚的认识代码的逻辑。

2.单元测试相当于debug的过程,尤其是在没有IDE开发的

3.在分布式开发的过程中,经常会多人同时合作编写代码的时候保护自己的代码。

4.便于小组合作时代码的责任分配问题。


junit4框架介绍

首先介绍最常用5个标签

@BeforeClass@Before @Test @After @AfterClass

其中@BeforeClass@AfterClass标记静态方法,且在编译测试代码的时候只执行一次。

@Before@Test @After根据testcase的个数决定执行次数。


然后说说junit的基本的API------RuleAssumeAssert

其中Assert比较常用,用于判断结果是否和预先设定的值相等。

AssertTrueAssertFalse:结果的truefalse

AssertThat:使用Matcher做自定义的校验。

AssertEqualsAssertNotEquals:判断两个对象是否相等。

AssertNullAssertNotNull:判断对象是否为空。

AssertSame:判断两个对象是否为同一个,不同于equals这里是使用“==”判断。

AssertArrayEquals:判断两个数组是否相等。

RuleAssume用的不多,一般Rule是测试用例执行过程中一些通用功能的共享,比如verify方法校验测试结果(如文件、结果是否更改等),ExpectedException异常测试,Timeout用来控制method的执行时间,具体可以看看这个博客:http://my.oschina.net/pangyangyang/blog/146015

谈谈单元测试与mock的关系:

一般深层测试,比如需要链接到外部节点或者需要链接外部数据库,可以用junit现有API解决,这种测试依赖于外部,一旦没有网络,或者外部依赖改变,测试代码无法进行。还有一种测试叫smock测试,当你不需要外部依赖的时候,或者多人合作时有复杂的依赖关系,则使用mockito虚拟对象,并且将虚拟对象注射到测试类中实现无外部依赖的测试,好处是使用mock出来的对象写的test完全与外部类的实现隔离了,依赖的类改变内容没有改变形式,只要test能跑过则证明自己逻辑没有问题,更改代码的小伙伴就要你的代码,或者依赖的类改变类的方法形式,导致test不能跑过,则更改代码的小伙伴也要更改你的代码以及test,总之写test不仅能更好的理解代码逻辑,还能保护住自己的代码。

对于mock的理解,mock的对象知道原来类中有的方法的形式,但是不知道方法的具体实现,所以mock出来的对象需要定义方法的返回值。一般用mockito.when().thenReturn()的形式,给mock出来的对象返回值,使得每一步都是自己手动调试过程。

这里介绍下google开发的PowerMockitoPowerMockitomock的升级版本,可以测试静态类和final类,对应的API可以参考 https://code.google.com/p/powermock/wiki/MockitoUsage13

https://powermock.googlecode.com/svn/docs/powermock-1.5/apidocs/org/powermock/api/mockito/PowerMockito.html

但是单元测试中会遇到private类,还有继承抽象类或者接口的类。

其中private类的测试可以用java的反射获得私有方法,然后测试

对于继承抽象类或者接口的,不能mock或者new抽象类或者接口,只能new子类,并在子类里实现父类方法的测试。

可以参考github上的代码:https://github.com/wendy926/ProgramByWendy



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值