Posts

Showing posts from September, 2019

Mockito 2 参数匹配器

Mockito 通过使用  equals()  这种自然的 Java 样式来校验参数值。有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers)。 请参考下面的代码: //stubbing using built-in anyInt() argument matcher when(mockedList.get(anyInt())).thenReturn( "element" );   //stubbing using custom matcher (let's say isValid() returns your own matcher implementation): when(mockedList.contains(argThat(isValid()))).thenReturn( "element" );   //following prints "element" System.out.println(mockedList.get( 999 ));   //you can also verify using an argument matcher verify(mockedList).get(anyInt());   //argument matchers can also be written as Java 8 Lambdas verify(mockedList).add(argThat(someString -> someString.length() >  5 )); 参数匹配运行进行灵活校验或者打标。 请访问  https://static.javadoc.io/org.mockito/mockito-core/3.0.0/org/mockito/hamcrest/MockitoHamcrest.html  链接来查看更多有关 自定义参数匹配器/hamcrest matchers(custom argument matchers/hamcrest matchers) 的内建参数匹配器和示例。 更多有关  自定义参数...

Mockito 2 关于打标(stubbing)

Image
请参考下面有关于打标的代码。 //You can mock concrete classes, not just interfaces LinkedList mockedList = mock(LinkedList. class );   //stubbing when(mockedList.get( 0 )).thenReturn( "first" ); when(mockedList.get( 1 )).thenThrow( new   RuntimeException());   //following prints "first" System.out.println(mockedList.get( 0 ));   //following throws runtime exception System.out.println(mockedList.get( 1 ));   //following prints "null" because get(999) was not stubbed System.out.println(mockedList.get( 999 ));   //Although it is possible to verify a stubbed invocation, usually it's just redundant //If your code cares what get(0) returns, then something else breaks (often even before verify() gets executed). //If your code doesn't care what get(0) returns, then it should not be stubbed. verify(mockedList).get( 0 ); 在默认情况下,所有的方法都会有一个返回值。mock 函数默认返回的是 null,一个空的集合或者一个被对象类型包装的内置类型。例如,针对 int/Integer 将会返回 0,针对 boolean/Bo...

Mockito 2 让我们校验一些行为

在下面的示例中,我们将会模拟(Mock)一个 List 列表。 这是因为绝大部分的人对列表这个接口比较熟悉(例如  add() ,  get() ,  clear()  方法)。 在实际情况中,请不要 mock list 这个类,你可用使用实际的实例来代替。 //Let's import Mockito statically so that the code looks clearer   import   static   org.mockito.Mockito.*;     //mock creation   List mockedList = mock(List. class );     //using mock object   mockedList.add( "one" );   mockedList.clear();     //verification   verify(mockedList).add( "one" );   verify(mockedList).clear(); 一旦创建完成后,mock 将会记住所有的交互。你可用选择校验任何你感兴趣的交互。 测试代码请访问 GitHub https://github.com/cwiki-us-demo/mockito-demo-java/blob/master/src/test/java/com/ossez/demo/mockito/MockitoBehaviourTest.java https://www.cwiki.us/pages/viewpage.action?pageId=47843416

整合到 Mockito 2

为了能够持续改进 Mockito 和在未来提升测试体验,我们希望你能够升级到 Mockito 2.10!Mockito 按照语义化版本( semantic versioning )的方式对版本进行编排,并且只在主版本升级的时候包含有重大的修改。 在库的生命周期中,有时候重大升级是必要的,通常在重大升级中包含有很多重要的新特性,对老的库进行修改甚至有可能会修改 API。 有关完整的指南和一些不兼容的修改,请参考 What's new in Mockito 2  Wiki 页面中的内容。 我们希望能够享受  Mockito 2 带来的改进和便利。 Mockito Android 支持 在 Mockito version 2.6.1 中,我们原生包含 Android 支持(Android support)。 为了能够使用 Android 支持,添加 mockito-android 库到你项目的依赖中。这个 artifact 是 Mockito 项目组开发的,可以使用下面的的语法将依赖导入到你  Android 的项目中。 repositories { jcenter() } dependencies { testCompile "org.mockito:mockito-core:+" androidTestCompile "org.mockito:mockito-android:+" } 你可以通过在你的 testCompile scope 中使用 mockito-core 在常规虚拟机(VM)中运行相同的单元测试. 请注意,因为 Android 虚拟机的限制,你不能在 Android 中使用  inline mock maker 。如果你在 Android 的测试中持续遇到问题,请访问官方的创建问题: https://github.com/mockito/mockito/issues/new  链接来向官方报告你遇到的问题。在向官方提交 Android 测试遇到的问题的时候,请同事提供你当前使用 Android 的版本和你项目中使用的依赖。 无配置 inline mock making 从版本 2.7.6 开始,我...

Hibernate 5 Maven 仓库的 Artifacts

Hibernate artifacts 官方发布的仓库在 JBoss Maven repository 中。Hibernate 发布的 artifacts 也会同时同步到 Maven Central 仓库中,这是一个自动同步进程(可能会有一些延迟)。 Hibernate 项目小组负责维护 JBoss 的 Maven 仓库,同时还有一些 WIKI 的页面,这些 Wiki 页面中包含了与 Hibernate 仓库有关的重要信息: http://community.jboss.org/docs/DOC-14900  - 有关仓库的基本信息。 http://community.jboss.org/docs/DOC-15170  - 有关设置 JBoss 仓库,以便于在 JBoss 项目中进行开发工作。 http://community.jboss.org/docs/DOC-15169  - 设置访问仓库来将 JBoss 项目为你软件的一部分。 Hibernate ORM artifacts 是发布在  org.hibernate  groupId 下的。 https://www.cwiki.us/display/HIBERNATE/Obtaining+Hibernate

Hibernate 5 发行组件下载

Hibernate 项目小组提供了一系列发布组合(bundles),这些发布组合发布在 SourceForge 文件发布系统中。这些发布的包有 TGZ 和ZIP 格式。 每一个发布组合包含有 JAR 文件,文档,源代码和其他一些有用的内容。 你可以选择你需要的格式来下载 Hibernate 的发布版本,有关发布版本的列表,请参考 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 。发布版本的结构请参考下面的内容: lib/required/ 目录包含有 hibernate-core Jar 和所有需要的依赖。不管你需要使用 Hibernate 的何种功能,所有的这些都需要设置到你的  classpath 路径中。 lib/envers  目录包含有 hibernate-envers Jar 和需要的依赖(这些依赖,不包含在 lib/required/ 和lib/jpa/ 中)。 lib/spatial/  目录包含有 hibernate-spatial Jar 和需要的依赖(这些依赖,不包含在 lib/required/ 和lib/jpa/ 中)。 lib/osgi/  目录包含有 hibernate-osgi Jar 和需要的依赖(这些依赖,不包含在 lib/required/ 和lib/jpa/ 中)。 lib/jpa-metamodel-generator/ 目录包含了创建 Criteria API type-safe 元模型(Metamodel)所需要的 Jar。 lib/optional/ 包含了各个连接池和 Hibernate 提供的二级缓存所需要的 Jar,已经它们所需要的依赖。 https://www.cwiki.us/display/HIBERNATE/Obtaining+Hibernate

Hibernate 5 的模块/包(modules/artifacts)å

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义了 ORM 的特性和 API 以及一系列整合的 SPIs。 hibernate-envers Hibernate 历史的实体版本特性 hibernate-spatial Hibernate 的 Spatial/GIS 数据类型支持 hibernate-osgi Hibernate 支持运行 OSGi 容器 hibernate-agroal 整合  Agroal  连接池库到 Hibernate hibernate-c3p0 整合  C3P0  连接池库到 Hibernate hibernate-hikaricp 整合  HikariCP  连接池库到 Hibernate hibernate-vibur 整合  Vibur DBCP  连接池库到 Hibernate hibernate-proxool 整合  Proxool  连接池库到 Hibernate hibernate-jcache 整合  JCache  缓存特性到 Hibernate,使任何与其兼容的缓存实现能够成为 Hibernate 二级缓存的提供者 hibernate-ehcache 整合  Ehcache  缓存库到 Hibernate 中成为 Hibernate 的二级缓存提供者 https://www.cwiki.us/display/HIBERNATE/Obtaining+Hibernate

Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Object/Relational Mapping (ORM))。对象关系映射的定义为从技术上在数据模型和关系数据库模型之间进行映射。请参考  http://en.wikipedia.org/wiki/Object-relational_mapping  来获得更高层次的讨论。同时,Martin Fowler 的  OrmHate  文章讨论了很多映射不吻合的问题。 尽管在使用 Hibernate 的时候不需要你具有很强的 SQL 背景,但是具有一些对 SQL 和相关概念的的基本了解能够帮助你更加快速和全面的理解 Hibernate。对数据模型(data modeling)原理的了解对使用 Hibernate 非常重要。 http://www.agiledata.org/essays/dataModeling101.html  和  http://en.wikipedia.org/wiki/Data_modeling  能够帮助你从开始了解数据模型的原理。 Hibernate 对 Java 类到数据库表中的映射进行实现,同时也实现了 Java 数据类型到 SQL 数据类型。更进一步,Hibernate 能够对数据进行查询和检索。Hibernate 能够显著的减少针对 SQL 和 JDBC 的手动数据处理。Hibernate 的目标是通过尽量减少针对 SQL 和 JDBC 需要的手动操作,来减少 95% 的通用数据持久性相关程序开发任务。与其他持久性解决方案不同的是,Hibernate 并不隐藏 SQL 的强大功能,并保证你对关系技术和知识的投资与往常一样并有效。 Hibernate 可能不是针对数据中心的最佳解决方案。数据中心的意思是在数据库中实现所有的商业逻辑。Hibernate 针对面向对象域模型和基于 Java 中间层的商业逻辑非更有效率。Hibernate 能够帮助你删除和封装供应商特定 SQL 代码和简化从返回结果集从表格展示转换为对象。 如果你希望参与项目,请参考  http://...

Git 如何针对项目修改本地提交提交人的信息

Image
Git 如果不进行修改的话,在默认情况下将会使用全局的用户名称和电子邮件。 但是在 GitHub 中是通过用户邮件来进行提交人匹配的。 如何针对项目来修改提交的用户信息? 针对 TortoiseGit, 你可以在项目中选择 settings。 然后选择 Git 的 local 选项。 在 Local 中填入你希望使用的用户名和邮件地址,然后保存即可。 如果你不是使用 TortoiseGit,你可以在你项目 Check out 的目录中,打开文件: .git\config 在这个文件中的最下面,输入: [user] name = YuCheng Hu email = yhu@ossez.com 你可以根据你的用户名和密码换成你的。 然后保存即可。 一个大致的示例文件如下图:

Spring Batch 4.2 新特性

Spring Batch 4.2 的发行版主要增强了下面的改进: 使用  Micrometer  来支持批量指标(batch metrics) 支持从  Apache Kafka  topics 读取/写入(reading/writing) 数据 支持从  Apache Avro  资源中读取/写入(reading/writing) 数据 改进支持文档 使用 Micrometer 的批量指标 本发行版本介绍了可以让你通过使用 Micrometer 来监控你的批量作业。在默认的情况下,Spring Batch 将会收集相关批量指标(包括,作业时间,步骤的时间,读取和写入的项目,以及其他的相关信息),和将这些指标通过  spring.batch  前缀(prefix)注册到 Micrometer 的全局指标中。 这些指标可以发布到任何能够支持 Micrometer 的   监控系统(monitoring system) 中。 有关这个新特性的更多细节,请参考  Monitoring and metrics  章节中的内容。 Apache Kafka item 读取/写入 本发行版本添加了一个新的  KafkaItemReader  和  KafkaItemWriter  ,用来从 Kafka 的 topics 中读取和写入。 有关更多这个新组建的信息,请参考: Javadoc 。 Apache Avro item 读取/写入 本发行版本添加了一个新的  AvroItemReader  和  AvroItemWriter, 用来从 Avro 资源中读取和写入。 有关更多这个新组建的信息,请参考:  Javadoc 。 文档更新 对参考的文档进行更新,以便于与其他 Spring 项目的文档风格保持一致。 4.1 版本的文档更新 下面的内容是 4.1 文档版本中的更新,我们没有将这部分内容从我们的 WIKI 中删除已保持历史信息的一致。 请参考下面链接获得 4.1 文档版...