Java

Grails初体验

Groovy脚本语言由于之前提到的诸多新特性,可以作为JVM平台上Java语言的有力补充,对于熟悉Java语言的开发者无疑是个好消息:能使用非常近似的语法而代码生产力数倍提升,何乐而不为?Groovy语言可以应用在不同的领域,当然因为互联网的缘故,网站应用是语言发展必须要考虑的重点,这也就是为什么松本行弘《代码的未来》中提到,由于Rails的流行才使得Ruby语言逐渐火热起来。Grails便是在这种背景下产生的基于Groovy语言的Web开发框架,顾名思义:Grails即为Groovy plus Rails,所以可以理解为JVM平台下的Rails框架。

Reading Note on WG Java Developer Groovy a little

《Java程序员修炼之道》之Groovy入门

简介

Groovy是JVM上的一种动态语言,主要用来解决快速Web开发、原型设计、脚本处理以及其他很多问题。一个简单的例子是把Java Bean转成XML输出,使用Java会比较笨拙,而用Groovy完成则非常简洁。Groovy实现的Java不具备的几个语言特性如下:

  • 函数字面值(闭包
  • 对集合的一等(即语法内置)支持
  • 对正则表达式的一等支持
  • 对XML处理一等支持

Reading Note on WG Java Developer Chapter 6

《Java程序员修炼之道》笔记之理解性能调优

引言:本章总体上简要地介绍了性能调优的一般方法以及Java平台的内存管理机制。对基本的概念和思想有个了解即可,真正生产环境的性能调优的话这本书也不够。下面即笔记正文,以概念和提纲为主,枯燥冗长,慎入。

秘诀?没有秘诀。

你必须量体裁衣。没有评测,就没有合适的调优。

评测或者说度量,是一切改进和优化的基础,猜测和凭空分析都不是。

What exactly invariant is

invariant到底是什么意思

经常在英文计算机书籍或文章中看到invariant这个词,不过如果要我立刻说出它的意思,我的反应肯定是:一愣。本着对科学认真负责的态度,还是得上网搜索一下,以正视听,哇哈哈。

在著名的问答网站知乎上搜索invariant(s)无果,尝试“不变量”、“不变式”均无果。哼,知乎对计算机科学不够重视啊。在国外著名的问答网站Quora也没找到精确结果,囧;只能求助程序员问答网站Stackoverflow了,Bingo!果然给力,答案在这。为了更清晰地解释这个概念,我把原文翻译成中文如下:

Talk about DI again

再谈依赖注入

理解了控制反转和依赖注入的基本概念之后,就可以了解一些实际的应用了。在《Java程序员修炼之道》第三章,作者深入剖析了依赖注入的技术背景和应用实例。

主要内容包括:

  1. 控制反转和依赖注入
  2. 掌握依赖注入技术为什么如此重要
  3. JSR-330如何统一了Java中的DI
  4. 常见的JSR-330的注解,如@Inject
  5. Guice 3简介,JSR-330的参考实现

Java Swing Automation Test Study(2nd part)

Java Swing界面自动化测试初探(下)

本文下半部分主要介绍开源的Java Swing自动化测试工具,评价和注解完全基于个人粗浅理解。

FEST

FEST is a collection of libraries, released under the Apache 2.0 license, whose mission is to simplify software testing. It is composed of various modules, which can be used with TestNG or JUnit.

Our users include: Google, Square, Eclipse Foundation, Oracle, IBM, Guidewire, and many more!

评价:五星
官方网站http://fest.easytesting.org/
代码下载https://code.google.com/p/fest/
主要特点

  • 功能性Swing界面测试(Functional Swing GUI Testing)
  • 流畅的断言(Fluent Assertions)
  • 流畅的反射(Fluent Reflection)
  • mockito 作为模拟框架(Mock framework)
  • 文档丰富,应用广泛
  • 第四届ATI自动化大奖第一名
  • 没有录播(Record-Play)的功能

Java Swing Automation Test Study (1st part)

Java Swing界面自动化测试初探(上)

最近有机会又学习了一下Java自动化测试框架,对于自动化测试有了进一步的了解。自动化测试的效果,业界一直都存在一些争论,不过我理解现在的基本共识是自动化测试(即利用程序实现测试工作)是有用的,至于对不同类型的软件能起到多大的作用就要依情况而定。有的软件项目自动化测试可能可以覆盖大部分场景,有的可能只能覆盖较少部分。前一段时间看Robert C. Martin大叔的《程序员的职业素养》,其中对于测试的重视程度令人印象颇深。Martin大叔花了三章的篇幅来讲述测试,分别是测试驱动开发、验收测试和测试策略。而在测试驱动开发一章中,他谈到自己和Kent Beck的一次会面,看完Kent的展示之后,他说:“这让我目瞪口呆!”。Martin大叔的结论是:“此事已有定论!TDD确实可行。”

当然是否是TDD是开发模式的选择,不一定要强求,但是对于自动化测试的重要性,大家应该是广泛认同的。在Jeff Atwood最新出版的博客文集(中文版译名《高效能程序员的修炼》)中,Jeff引用了J.Timothy King的一篇文章,题为《我同情那些不写单元测试的傻瓜》,并由此而展开了对于测试重要性和方法的探讨,并警示大家,不要因为不喜欢测试驱动就不写测试了,这是非常错误的。自动化测试活动在保障产品质量、提高开发效率和持续交付能起到十分关键的作用。

具体到我们实际的开发工作,Java自动化测试起源较早,敏捷声明的发起人之一、XP方法的倡导者Kent和Erich(《设计模式》作者之一)合作创建了JUnit单元测试框架,在Java世界里享有盛誉并成为事实上的标准。不过,现在还有一个更加流行的选择,TestNG。TestNG不仅在单元测试方面,而且在组件测试方面,甚至在功能和系统测试上都有很大的帮助。当然,本文主要不是讨论测试框架,我们主要讨论Java世界里的界面测试问题。有关自动化测试框架的话题,可参考相关网站。