你应该更新的Java知识之常用程序库(二)

标签: 更新 java 知识 | 发表时间:2013-01-03 15:16 | 作者:dreamhead
出处:http://dreamhead.blogbus.com

Hamcrest

一句话,如果你写单元测试,就应该用 Hamcrest

如今不写单元测试,你都不好意思说自己在做工程项目了。但你一般这么写断言呢?如果你还写成下面这样,我只能说你落伍了:

  assertEquals(a, b);

请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的。所以,这个在只重功能不重可读性年代产生的API该更新了。于是,Hamcrest就是为了解决这样的问题而生的。

  assertThat(a, is(b));

很明显,前面一个是执行结果,后面一个是预期结果,当然这只是一个简单的例子。由于Hamcrest引入了matcher的概念(就是你看到的is部分),我们可以进行更多的组合:

  assertThat(number, greaterThan(5));
  assertThat(text, startsWith("Hello"));
  assertThat(array, hasItem("World"));

Hamcrest如此好用,以至于JUnit已经将其吸纳进去。如果你现在用的JUnit是4.4之后的版本,那你已经有了Hamcrest。无需额外的配置,就可以拿过来用。

Mockito

写单元测试不用Mock框架几乎是一件不可能的事,我是说Mock框架,不是Mock模式哦!对于老Java程序员来说,提起Mock框架,率先在脑海中撞线的多半是 JMockEasyMock

使用 Mockito,只要有一个理由就够了,简单。相比于JMock,它不用写checking,相比于EasyMock,它省去了replay。下面是个例子:

  List mockedList = mock(List.class);
  when(mockedList.get(0)).thenReturn("first");
  System.out.println(mockedList.get(0));

当然, Mockito还是非常强大的

最后再强调一遍,无论使用哪个框架,请尽量不要使用verify,也就是传说中的Mock模式,那是把代码拉入泥潭的开始。

SLF4J和Logback

日志几乎是稍微有点规模的项目躲不开的一个东西,如果你是个老Java程序员,你必然知道 Log4J,多半也知道 Commons Logging。是时候把它们扔掉了,因为有 SLF4JLogback了。SLF4J要替代Commons Logging,而Logback的目标是Log4J。

程序员里愤青多,SLF4J和Logback的作者就是一个,他叫 Ceki Gülcü,事实上,他也是Log4J的作者。Log4J的开发状态实在让他太不爽了,于是,他另起炉灶,打造出新的替代品。

只凭一点就足以让我们对SLF4J义无反顾了,你还记得用Commons Logging写出这样的代码吗?

  if (logger.debugEnable()) {
    logger.debug("Hello, ", name);
  }

而在SLF写法只有一句话:

  logger.debug("Hello, {}", name);

从根源来说,这是时代造成的,Commons Logging是Java 5之前产生的,那时候还没有变参,所以,我们不得不说,它老了。

至于Logback,性能是最重要的噱头,当然,还有 一些其它的理由。理由里有一点并未提及,但对于开发人员很贴心的改进,就是日志模式的改进,还记得Log4J那密码一样的日志模式吗?

  %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %m%n

下面是Logback的版本,不用查文档,我也看出每段表示的都是什么:

  %d{dd MMM yyyy HH:mm:ss} [%thread] %-5level %msg%n

这里介绍的几个程序库都是很通用的,无论是你做怎样的开发,应该都或多或少给你一些帮助。时间未曾停步,Java开发也未曾停留,如果你是个老Java程序员,是时候更新一下自己的知识了。

相关 [更新 java 知识] 推荐:

你应该更新的Java知识之常用程序库(二)

- - 梦想风暴
一句话,如果你写单元测试,就应该用 Hamcrest. 如今不写单元测试,你都不好意思说自己在做工程项目了. 如果你还写成下面这样,我只能说你落伍了:. 请告诉我,哪个是执行结果,哪个是预期结果,不管你是怎样,反正大多数情况下,我是记不住的. 所以,这个在只重功能不重可读性年代产生的API该更新了.

你应该更新的Java知识之常用程序库(一)

- - 梦想风暴
在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进. 如果你曾离开Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老Java中的新东西. 一句话,只要你做Java项目,就应该用 Guava. guava是Google出品的一套Java核心库,在我看来,它甚至应该是JDK的一部分.

你应该更新的Java知识之构建工具

- - 梦想风暴
时至今日,如果你的Java项目依然需要启动一个特定的工具,比如IDE,才能编译部署,那你的项目不在本文的讨论之中,因为实在落后得太让人无语了. 旧时代的Java世界,构建工具等同于两个词 Ant和 Maven. Ant源自Make,同JUnit一样,它也是一个航班产物(参见《 Ant权威指南》序).

你应该更新的Java知识之Observer

- - Java - 编程语言 - ITeye博客
作为一个Java程序员,不熟悉设计模式简直不好意思和人打招呼,而Observer模式可以说是位列最常用的设计模式之列,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式. 手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observer,从JDK 1.0里,它们就一直在那里.

java基础知识

- - CSDN博客互联网推荐文章
JAVA相关基础知识. 1、面向对象的特征有哪些方面. 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.

硅谷中的知识产权:Java大战

- - 译言-投资/理财/创业
硅谷的知识产权:Java大战  甲骨文和谷歌之间的法律斗争非常神秘,但是风险也非常高. 甲骨文和谷歌的老总分别是拉里·埃里森和拉里·佩奇. 他们的教名是一样的,但对某一知识产权问题的观点却是不同的. 4月16日,陪审团开始在庭审中听取双方的辩解,来决定谷歌的安卓操作系统是否侵犯了甲骨文公司的版权和专利.

欧朋浏览器6.2 For Android/Symbian/Java发布更新

- 洞箫 - cnBeta.COM
新一代浏览器界面,简约、精致、时尚,摆脱拥挤,复杂的手机浏览器界面,打造个性化的浏览器. 快速拨号“快速拨号”将喜欢的网站添加到首页,实现一键点击访问. 通过定制“快速拨号”,你可以打造一个个性化的浏览器首页. 体积小巧、功能强大,欧朋浏览器结合了强大的内核和领先的云端转码技术,可使手机访问网站速度提升5到10倍,使上网流量节省最高达90%.

苹果发布第二个 Java 更新(2012-002)

- - 果迷网
前天苹果刚刚发布 Mac OS X 的 Java 更新 2012-001,今天又接着发布了 Java 2012-002 更新,再度提高系统安全性. 根据统计,目前全球共有 60 万台 Mac 电脑感染了 Flashback 木马,这种木马正是利用了 Java 运行时的安全缺陷感染 Mac 电脑的.

深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结

- - CSDN博客推荐文章
        要回答这个问题,先了解下GC的发展史、jvm运行时数据区的划分、jvm内存分配策略、jvm垃圾收集算法等知识.         先说下jvm运行时数据的划分,粗暴的分可以分为堆区(Heap)和栈区(Stack),但jvm的分法实际上比这复杂得多,大概分为下面几块:.         1、程序计数器(Program Conuter Register).

Oracle Java SE 8 发行版更新:限制商业或生产用途

- - 开源中国社区最新新闻
Oracle Java SE 8 发行版更新. Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底. 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务、商用或生产用途提供. 如果您是使用者,将 Java 用于单独的个人用途,则至少在 2020 年底之前,您对 Oracle Java SE 8 更新仍具有与现在相同的访问权限.