单元测试
tom3mao
后端技术专家
展开
-
PowerMock处理特殊的单元测试
背景代码设计并不总是尽善尽美,有些单元测试是Mockito力不从心的。 这时候就需要PowerMock ,这个框架是对Mockito增强。 下面展示几个常用场景 - mock静态方法 - 跳过私有方法 - 更改子类无法访问的父类私有field - 更改类的私有static常量 - 模拟New构造函数示例首先引入Maven依赖 <dependency>原创 2017-11-12 12:31:17 · 4575 阅读 · 0 评论 -
Junit单元测试避免死循环
查看单元测试运行结果,总是卡到一个测试那里不动 。 查看代码,原来有个逻辑更新后没有及时更新单元测试,造成while循环永远不结束。 @Test public void test1() { while (true) { // do something } }这些修好不保证下次又被谁改坏,可以使用timeout注解,运行超过一定时间,强制失败,终止测试。如下测试原创 2017-10-22 21:45:31 · 4116 阅读 · 1 评论 -
EasyMock的一个大坑
问题项目里大量单元测试采用了EasyMock框架,Maven命令跑测试总是报如下错误:java.lang.IllegalStateException: N matchers expected, M recorded.打开报错的单元测试,无论是通过命令: mvn test -Dtest=Mytest,还是通过eclipse单独运行,均无法重现问题。record-replay-verify模型EasyM原创 2017-11-04 18:09:43 · 3315 阅读 · 1 评论 -
第三方支付异步通知的陷阱
用户下单后调用第三方支付付款,然后接收第三方支付的异步通知,以便确认支付是否成功。 如下图 但异步通知可能由于网络原因,或者应用服务崩溃没有接收到。为了应对这种情况需要后台创建一个定时任务去调用第三方接口,主动查询支付结果。这种情形下就涉及并发的问题,可能后台定时任务跟异步通知同时收到了支付成功结果,同时对响应数据进行处理。通常通过加锁来避免这种问题。 到了这里一切看起来很美好。代码提原创 2017-12-03 20:16:13 · 5955 阅读 · 3 评论 -
Maven test多线程陷阱
maven-surefire-plugin运行Junit测试。 一段时间后发现一些运行失败的单元测试只能通过maven test重现。 后来了解到maven-surefire-plugin默认是多线程执行Junit test的,而一些单元测试共用了相同的资源,没有实现线程安全。 重构单元测试的同时将maven-surefire-plugin配置为单线程执行Junit,避免出现线程问题原创 2017-11-26 18:15:01 · 4160 阅读 · 0 评论 -
Mockito模拟同一dao函数多次调用的不同结果
在单元测试中很难创建真实的dao,Mockito能够模拟这些dao,并验证所调用的dao的行为。 同一个dao方法在一个public方法中调用多次,可以根据参数不同采用Mockito的ArgumentMatcher来处理。 如下// 查询dao.selectByPrimaryKey(1)dao.selectByPrimaryKey(2)// 插入dao.insert(object1)原创 2018-01-01 20:48:40 · 8482 阅读 · 0 评论 -
什么是无效的单元测试
这里仅仅从代码层面来说明无效的单元测试。不验证结果 待测试的类public class BaseService { public String getId(String key) { if (key == null) { return null; } return "value"; }} 对应的单元测试import org.junit.Test;原创 2018-01-01 22:27:02 · 906 阅读 · 0 评论 -
爱上单元测试:基于Groovy的Spock框架
Spock测试框架基于Groovy并集成了Junit、TestNG、Mockito等众多测试框架的优点。 Spock编写的单元测试层次清晰,代码量少,可读性好。 Groovy无缝兼容Java:Groovy最终会编译为class文件,JVM根本不在乎class来自jJava还是Groovy文件,支持各种集成开发环境(eclipse,Intellij Ieda),尤其是Intellij idea已...原创 2018-05-18 00:03:10 · 14986 阅读 · 3 评论