英文原文:Eight Tools Every Java Developer Should Know (and Love)
翻译作者:码农网 – 孙腾浩
在Stormpath(一款用户管理和认证服务),我们认真对待质量和效率。任何一个优秀的工匠,仅仅拥有天赋是不够的,你在工作中还需要正确的工具。工程学不仅仅是科学,更是艺术。所以,在Stormpath,尽管我们拥有天赋,我们仍不断寻找所需的有用的工具。我们的工程师一直渴望向团队其他人分享新工具。现在,让我们向所有充满天赋的Java开发者推荐工具。
在这篇文章中,我将分享我们Java团队日常工作使用的工具,并介绍如何使用它们,分享一些实用的小技巧。
1.Groovy
我们使用Groovy来写Java测试。为什么?因为它提供了下面这些能力:
宽松的Java语法:这是Java语法,但有些其他规则,比如分号,变量类型,访问修饰符都是可选的。后者对于测试意义重大,由于访问修饰符不是严格的,你的测试可以读取并断言类内部的状态。举个例子,我们假设下面一个类:
public class Foo { private String bar = null; public void setBar(String bar) { this.bar = bar;
}
}
如果你想测试setBar(String)方法正常(即能正确修改bar的值),你可以用Groovy方便的读取变量值。Java中不允许这样的操作(在不涉及Java反射机制前提下)。
@Test public void test() {
def foo = new Foo()
foo.setBar("hello")
Assert.isTrue(foo.bar.equals("hello")) }
强大的断言:Groovy提供强大多样的assert,被称作power assertion statement。Groovy的强大断言能够清晰的展示验证失败时的结果。另外,它比Java更有可读性。
Assert.isTrue(foo.bar.equals("hello"));
可以用Groovy这样写:
assert foo.bar == "hello"
当断言失败时它会显示一个非常清晰的描述:
assert foo.bar == "goodbye"
| | |
| | false
| hello
Foo@12f41634
Mocking:使用Java时,动态模拟框架(如:EasyMock,PowerMock和Mockito)非常流行,这些框架可以在Groovy下方便的使用。耶!
2.支持REST风格
我们的后端提供REST API服务来创建和管理账户,众多SDK中,我们的Java SDK提供特定语言客户端模型做简单交互。其中一些SDK也提供网页来和后端交互,从而不用编写代码。
为了保证网络框架的互操作性,它们必须表现的一样。因此我们需要创建一系列基于HTTP的测试。这是我们的兼容性测试工具。这个项目由我们的SDK工程师维护,他们精通不止一种语言。因此我们需要跨语言测试工具,谢天谢地Rest-assured来了。
Rest-assured是Java领域特定语言(DSL domain-specific language)用来测试REST服务,它简单易用易上手,甚至对于没有用过Java的开发者也是难以置信的强大。它提供先进的特性,比如细节配置、过滤器、定制分析、跨站请求伪造(CSRF)和OAuth 2.0。它提供非常简单的语法:given-when-then。
举个例子:让我们来看它如何校验“向/login路径发送post认证信息请求返回302状态码”:
given() .accept(ContentType.HTML) .formParam("login", account.username)
.formParam("password", account.password) .when() .post(LoginRoute) .then() .statusCode(302)
你可以在我们的
TCK repo
中看到更多Rest-assured测试
3.Cargo Plugin
为了让我们的Java SDK按照TCK校验,我们需要开启我们其中一个Web服务,以便测试在上面执行。讲道理的话,我们需要每次构建时自动测试,Gargo Plugin就是为此而生。
Cargo用标准的方式简单封装各种应用容器。我们使用Cargo可以毫不费力的在不同的Servlet容器(比如Jetty和Tomcat)中运行我们的代码。我们只需要在我们的pom文件中配置Cargo Maven2 Plugin来启动一个Servlet容器(Tomcat7),在测试阶段编译最近的War包,你可以在我们的Servlet插件例子中看到配置。
4.Git
我们能讨论哪些关于Git你不了解的事情呢?想要深入了解Git,你可以看他们的About页。
我们的Java SDK团队遍布全球,而且彼此之间几乎从未坐在一起。Git保障了我们写的每一行代码,这里有一些非常棒的命令,节省了我们大量的时间:
-
git mv –force foo.java Foo.java:在大小写敏感的文件系统中改变文件名是非常麻烦的,这个命令能让git意识到foo.java重命名为Foo.java
-
git diff-tree –no-commit-id –name-only -r
:查看所有在
这次提交中更改的文件。
-
git diff –name-only SHA1 SHA2:列举出在SHA1和SHA2两次提交之间所有更改的文件。
-
在一个文件的历史提交记录中查询某个字符串:创建search.sh文件,粘贴下面代码: