Java单元测试

拆分单元与集成问题1:单元测试用例与集成测试用例的区别是什么?单元测试不依赖上下文环境,集成测试依赖上下文环境,比如依赖Spring的容器环境、数据库、缓存等。问题2:为什么要拆分单元测试用例与集成测试用例? 代码组织:为了避免在开发或调试过程中浪费时间,有必要将单元测试从集成测试中区分出来。 依赖框架:根据定义,单元测试不需要运行任何框架容器(JDK和JUnit应该足够),集成测试需要运行时所需的所有框架,这极大增加了编译时间。 依赖环境:集成测试依赖外部工具(数据库,外部API等),从集成测试中拆分单元可以使编译时间更短,并尽可能快地运行测试。拆分单元测试与集成测试单元测试 Mock使用 Mock 框架 Mockito、Powermock。// 依赖管理testCompile group: 'org.mockito', name: 'mockito-core', version: '3.1.0'testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.4'test...

Semaphore源码分析

基础解释Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。注意:Semaphore 限制了并发访问的数量而不是使用速率。 Semaphore内部维护了一组虚拟的许可,许可的数量可以通过构造函数的参数指定。 访问特定资源前,必须使用acquire方法获得许可,如果许可数量为0,该线程则一直阻塞,直到有可用许可。访问资源后,使用release释放许可。应用场景比如,通过多线程读取远端数据源实现信息采集,为防止采集线程过多对远端数据源造成压力,所以要限制采集任务的并发执行线程数量,可以通过使用Semaphore信号量实现;源码分析public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairSync(permits);}Semaphor...

SDKMAN

# 安装软件sdk list gradlesdk install gradle 6.7.1sdk uninstall gradle 6.7.1# 查看版本sdk currentsdk current javasdk current gradlesdk current maven# 切换软件sdk use gradle 6.7.1sdk default gradle 6.7.1# 更新SDKMANsdk selfupdate参考资料 https://sdkman.io/

Java构建工具Maven

Maven 版本管理mvnw 全名是 Maven Wrapper,它的原理是在maven-wrapper.properties文件中记录你要使用的 Maven 版本。当用户执行mvnw clean命令时,发现当前用户的 Maven 版本和期望的版本不一致,那么就下载期望的版本,然后使用用期望的版本来执行命令。# 添加mvnw支持mvn -N io.takari:maven:wrapper# 切换Maven版本mvn -N io.takari:maven:wrapper -Dmaven=3.3.9Maven 依赖范围 对于<scope>compile</scope>的情况,依赖在项目编译、测试,运行阶段有效; 对于<scope>provided</scope>的情况,依赖在项目编译、测试阶段有效,在运行阶段无效; 对于<scope>test</scope>的情况,依赖在项目测试阶段有效;Maven 继承机制http://maven.apache.org/pom.html#Inheritance利用mvn ...

搭建Nexus仓库

Nexus 安装配置[NEXUS REPOSITORY MANAGER 3 系统配置要求](https://help.sonatype.com/repomanager3/product-information/sonatype-nexus-repository-system-requirements){:target=”_blank”}Nexus下载地址http://nexus.sontatype.org/downloads/ Nexus默认端口:8081,通过conf/nexus.properties修改服务端口 Nexus默认账号:admin/admin123Nexus运行用户# 创建nexus用户(注意⚠️:Nexus会使用运行程序用户的home目录,用于创建锁,因此必须创建用户的home目录)sudo groupadd nexus && sudo useradd -r -g nexus -m nexus# 修改目录归属sudo chown -R nexus:nexus nexus-3.8.0-02sudo chown -R nexus:nexus so...

HashMap源码分析

场景描述最近,项目中常常见到类似下面的一段代码,即在初始化HashMap容量的时候,将插入HashMap的元素数量除以0.75f(即乘以4/3),从而防止插入元素数量大于HashMap默认初始容量DEFAULT_INITIAL_CAPACITY=16对应阈值而导致的扩容;Map<Integer, MenuItem> tmpMap = new HashMap<>(menuList.size() * 4 / 3);源码分析查看源码发现传入的menuList.size() * 4 / 3被赋值给HashMap作为初始容量,默认扩容因子为static final float DEFAULT_LOAD_FACTOR = 0.75f。public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + ...