摘要: 本文以我司生产环境Java应用内存泄露为案例进行分析,讲解如何使用Eclipse的MAT分析定位问题 一. 背景 11月10号晚上8点收到报警邮件,一看是OOM 打开公司监控系统查看应用各项指标发现JVM中老年代在持续增长(从上次发布10月30号到11月10号的12天内一直在增长, 存在内存泄露迹象 阅读全文
posted @ 2021-01-11 23:12 Java老K 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 我们深入研究元空间的架构。我们描述了各个层和组件,以及它们是如何协同工作的。 这对那些想要破解hotspot和Metaspace或者至少真正理解内存的去向以及为什么我们不能仅仅使用malloc的人来说是很有趣的。 与大多数其他非平凡的分配器一样,元空间是在层中实现的。 在底部,内存是在操作系统的大区 阅读全文
posted @ 2020-12-14 23:31 Java老K 阅读(427) 评论(0) 推荐(0) 编辑
摘要: Spock虽然好用,但要应用到实际项目中还是需要注意几个问题,下面讲下我们公司在使用过程中遇到的一些问题和解决方案 版本依赖 要使用Spock首先需要引入相关依赖,目前使用下来和我们项目兼容的Spock版本是1.3-groovy-2.5,以maven为例(gradle可以参考官网),完整的pom依赖 阅读全文
posted @ 2020-12-09 00:05 Java老K 阅读(1230) 评论(0) 推荐(0) 编辑
摘要: 我们平时写单元测试时经常会遇到调用抽象类或父类的方法,这些抽象方法可能是调用底层接口或数据库,需要mock掉,让抽象方法返回一个我们指定的值,以便测试当前代码逻辑的场景。 下面讲下Spock如何结合power mock实现动态mock抽象方法 一. 抽象方法或父类方法动态Mock AbstractS 阅读全文
posted @ 2020-12-08 00:26 Java老K 阅读(603) 评论(0) 推荐(0) 编辑
摘要: 这一篇介绍在实际使用Spock的过程中如何把一些常用的测试方法抽出来,封装成基类使用 BaseSpock 在前面几篇文章讲解Spock结合power mock实现静态方法mock功能时,示例代码里经常会用到LogUtils等工具类的静态方法去记录日志,那我们就可以把LogUtils类的mock代码抽 阅读全文
posted @ 2020-12-06 23:04 Java老K 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 这篇讲解Spock自带的mock功能如何和power mock组合使用,发挥更强大的作用 动态Mock静态方法 (Spock Where + Power Mock) 在上一篇的例子中使用power mock让静态方法返回一个指定的值,那能不能每次返回不同的值呢? 我们先看下什么场景需要这样做: /* 阅读全文
posted @ 2020-12-04 00:16 Java老K 阅读(1601) 评论(0) 推荐(0) 编辑
摘要: 本篇主要讲解Spock如何扩展第三方Power Mock对静态方法进行测试 实现原理 前面的文章讲到Spock的单测代码是继承自Specification基类,而Specification又是基于Junit的注解@RunWith()实现的,代码如下: @RunWith(Sputnik.class) 阅读全文
posted @ 2020-12-02 23:46 Java老K 阅读(1306) 评论(0) 推荐(0) 编辑
摘要: 本篇讲解如何针对void方法,即无返回结果的方法测试 void方法 void方法的测试不能像前面几篇介绍的那样在then标签里验证返回结果,因为void方法没有返回值 一般来说无返回值的方法,内部逻辑会修改入参的属性值,比如参数是个对象,那代码里可能会修改它的属性值,虽然没有返回,但还是可以通过校验 阅读全文
posted @ 2020-12-01 23:07 Java老K 阅读(882) 评论(0) 推荐(0) 编辑
摘要: 这一篇主要讲使用Spock如何测试代码中抛异常的场景 背景 有些方法需要抛出异常来中断或控制流程,比如参数校验的逻辑: 不能为null,不符合指定的类型,list不能为空等验证,如果校验不通过则抛出checked异常,这个异常一般都是我们封装的业务异常信息,比如下面的业务代码: /** * 校验请求 阅读全文
posted @ 2020-12-01 00:26 Java老K 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 一. Expect + Where 如果业务比较复杂,对应的代码实现会有不同的分支逻辑,类似下面的伪代码: if () { if () { // 代码逻辑 } else { // 代码逻辑 } } else if () { for () { if () { // 代码逻辑 } else { // 代 阅读全文
posted @ 2020-11-26 23:34 Java老K 阅读(554) 评论(0) 推荐(0) 编辑