java
文章平均质量分 55
a small bird
我是一只小小小小鸟~
展开
-
TestNG学习路线-从自动化初级开发者到框架开发专家
介绍TestNG并发执行方式、实现原理及注意事项原创 2022-06-12 00:51:05 · 203 阅读 · 0 评论 -
Gson转Map结果int类型变为Double
用gson将string反序列化为Map时,int类型变成了double类型。原因分析 new Gson().fromJson("{\"aid\":123,\"aa\":11.0}", Map.class); // 结果为{"aid":123.0,"aa":11.0}通过看gson解析过程,gson通过TypeAdapter的read方法来读取string的值并转化为对象:public <T> T fromJson(JsonReader reader, Type typeOfT) t原创 2021-07-28 20:20:39 · 2695 阅读 · 0 评论 -
String vs StringBuffer vs StringBuilder
代码实现String 类是一个final类型的不可变类,所以在对String类进行操作时,都会创建一个新的String类,造成空间和时间的开销。public final class String implements java.io.Serializable, Comparable<String>, CharSequence { }StringBuilder类 和StringBuffer类均实现了相同的接口和继承了相同的父类,只是StringBuffer的方法上加了syn原创 2021-07-13 12:27:29 · 112 阅读 · 0 评论 -
Spring bean加载顺序和执行顺序
在spring中,有时会存在实现多个相同类/接口的bean,而有时我们希望bean的加载或执行按照某种顺序执行。二话不说,先给出一个实现控制bean加载和执行顺序的实例有一个测试接口TestInterface,及其三个实现类:UnitTest、InterTest、UiTest,希望按照UiTest->InterTest->UnitTest的顺序加载bean,并按照UnitTest->InterTest->UiTest顺序执行定义一个测试接口package com.ex原创 2021-02-01 16:46:10 · 5845 阅读 · 1 评论 -
Java类加载器
类的生命周期类加载器种类Bootstrap ClassLoader:根类加载器,加载jdk/lib下的类。Extention ClassLoader:扩展类加载器,加载jdk/lib/extention下的类,jdk9后改为Platform ClassLoader。Application CalssLoader:应用程序类加载器,加载普通的应用程序。package example;import javax.xml.crypto.Data;public class Test1 { .原创 2020-12-05 17:47:21 · 630 阅读 · 1 评论 -
Jacoco Java方法控制流分析
Jacoco基于编译后的字节码来分析方法控制流,分析指令覆盖率和分支覆盖率时需要控制流信息。Java字节码控制流图:public static void example() { a(); if (cond()) { b(); } else { c(); } d();}public static example()V INVOKESTATIC a()V INVOKESTATIC cond()Z翻译 2020-08-28 22:26:56 · 673 阅读 · 0 评论 -
Jacoco实现原理
覆盖率分析机制覆盖率信息必须在运行时收集,Jacoco on-the-fly 模式通过jacoco agent在类加载时对原始类进行插桩,得到插桩后的类。收集覆盖率信息有几种方法,没有方法有几种不同的实现机制,橙色部分为Jacoco on-the-fly收集方式字节码插桩非常快,通过纯java实现,并且可以在任意java 虚拟机上运行。On-the-fly插桩模式通过为java虚拟机添加Java agent hook实现,不用改变目标应用程序。Java agent hook需要Jvm 1.5版本以翻译 2020-08-15 23:38:09 · 4888 阅读 · 0 评论 -
Jacoco 类标识符
jacoco在统计覆盖率时通过类标识符(class id)来标识一个类,接下来我们了解下Jacoco类标识符什么是类标识符,它们是如何创建的类标识符是一个64位整数,例如0x638e104737889183,是通过计算原始的class文件的CRC64产生的。类标识符有什么用类标识符用于识别Java类,在被加载的类运行时产生并存储在*.exec文件中,在分析的时候,比如在报告产生的时候,会通过类标识符把待分析的类和执行数据关联起来。Jacoco类标识符的优点及缺点优点:当服务部署了不同版本的应用,翻译 2020-08-14 18:38:32 · 793 阅读 · 0 评论 -
Jacoco Maven插件
Jacoco Maven插件提供运行时代理来产出测试覆盖率报告。条件maven版本3.0或更高版本运行和测试Java版本高于1.5使用原创 2020-08-13 18:45:22 · 2753 阅读 · 0 评论 -
如何理解Spring 依赖注入
我们为了给用户提供服务、开发满足用户需求的软件产品,需要编写代码,把一块块砖垒起来。随着用户越来越多,开发任务也越来越重,需要快速响应形形色色的用户需求,如此反复,代码也越来越多,软件的开发和维护成本越来越大,这样快速的开发及维护日益庞大的系统成了项目组一个新的诉求。选用一款易于上手、大众、设计良好的框架,可以帮助我们较好完成模块划分、管理及交互,基于框架业务开发人员可以减少很多代码量完成同样的功能,降低代码耦合度,提高复用率,快速接入各类组件和中间件。原创 2020-08-12 17:37:17 · 464 阅读 · 0 评论 -
IntelliJ IDE 覆盖率配置
本文主要详细介绍在IntelliJ IDE中执行测试并展示覆盖情况 本文IntelliJ IDE版本为2020.1插件安装安装Coverage插件,通过插件可以在IDE中展示被测代码的覆盖情况,配置路径为IntelliJ IDE -> Preferences -> Plugins,搜索Coverage并安装安装后就可以点击测试用例运行时选择Run with Coverage,或者右键测试类选择Run with Coverage插件配置配置路径 IntelliJ IDE.原创 2020-08-11 12:25:30 · 14252 阅读 · 0 评论 -
Jacoco覆盖率
Jacoco通过若干计数来统计覆盖率,这些计数基于class文件中的java 字节码指令和debug信息获取的,不依赖于源码,并且多数情况下,这些信息可以映射到源码行。其局限性就是要依赖于debug信息来计算行覆盖率,并不是所有的java指令都能编译成适合的字节码,俗称合成码,这种情况下计算的覆盖率不准确。行覆盖条件:如上所述,计算行覆盖率需要debug信息计算:至少行中的一条指令运行,则该行被覆盖分类:由于一行代码通常包含多条指令,根据指令的执行情况细分:- 无覆盖率:没有指令覆盖(红色)-翻译 2020-08-06 20:13:44 · 1504 阅读 · 0 评论 -
Jacoco简介
Jacoco的出发点是为基于JVM运行的代码提供代码覆盖率统计,期望提供轻量级的、可伸缩的、文档较全的库文件来集成各类构建和开发工具。Java代码覆盖率工具有几款开源工具,当实现Eclipse插件EclEmma时,他们都不方便集成,大部门只适用于一款工具(ant,命令行,IDE插件),没有相关文档说明如何集成到不同的上下文环境中。其中两款比较好用的是EMMA 和 Cobertura,不过这两款原作者都不再维护了,也不再支持最新的JVM了,主要由于缺乏回归测试,造成添加新特征比较困难。特此,作者开始开发J原创 2020-08-04 19:22:30 · 8286 阅读 · 0 评论 -
Junit5 + Jacoco Maven配置
Junit依赖参照 [官网](https://junit.org/junit5/docs/current/user-guide/#dependency-metadata) [中文](https://www.bookstack.cn/read/junit5/guide-installation-dependency-metadata.md) [依赖关系](https://www.bookstack.cn/read/junit5/guide-installation-dependency-di原创 2020-07-29 15:04:20 · 1706 阅读 · 0 评论 -
Java依赖冲突
什么是依赖冲突解决思路实例介绍原创 2020-07-10 13:12:30 · 769 阅读 · 0 评论 -
思维导图学Maven实战
持续更新中…原创 2020-07-08 10:26:47 · 247 阅读 · 0 评论 -
Java注解实现权限管理
一个简单的权限控制场景,已知登录用户id,判断这个用户是否存在数据库中,如果不存在则不允许进行任何操作。关于java注解介绍请参见 Java自定义注解实现权限管理基础实现在每个controller方法中添加用户校验代码,这种可以控制到方法级,但是每个方法都要维护这段重复逻辑。@RequestMapping(value = "/task/progress", method = RequestMethod.GET) public RestRsp getLabelTaskProgress(原创 2020-07-02 22:21:09 · 3155 阅读 · 0 评论 -
单测中对对象进行Assert比较
在单测中,当期望结果(Expect)和实际结果(Actual)都是对象时,进行Assert.assertEquals判断时,可能会不符合预期,我们认为符合预期的测试结果还是失败,主要还是对象equals方法导致的。原因分析解决方法具体实现...原创 2020-07-02 10:45:31 · 2454 阅读 · 0 评论