在Stormpath(一款用户管理和认证服务),我们认真对待质量和效率。任何一个优秀的工匠,仅仅拥有天赋是不够的,你在工作中还需要正确的工具。工程学不仅仅是科学,更是艺术。所以,在Stormpath,尽管我们拥有天赋,我们仍不断寻找所需的有用的工具。我们的工程师一直渴望向团队其他人分享新工具。现在,让我们向所有充满天赋的Java开发者推荐工具。

在这篇文章中,我将分享我们Java团队日常工作使用的工具,并介绍如何使用它们,分享一些实用的小技巧。

1.Groovy

我们使用Groovy来写Java测试。为什么?因为它提供了下面这些能力:

宽松的Java语法:这是Java语法,但有些其他规则,比如分号,变量类型,访问修饰符都是可选的。后者对于测试意义重大,由于访问修饰符不是严格的,你的测试可以读取并断言类内部的状态。举个例子,我们假设下面一个类:

  1. public class Foo {
  2. private String bar = null;
  3. public void setBar(String bar) {
  4. this.bar = bar;
  5. }
  6. }

如果你想测试setBar(String)方法正常(即能正确修改bar的值),你可以用Groovy方便的读取变量值。Java中不允许这样的操作(在不涉及Java反射机制前提下)。

  1. @Test public void test() {
  2. def foo = new Foo()
  3. foo.setBar("hello")
  4. Assert.isTrue(foo.bar.equals("hello"))    //groovy 允许我们访问私有变量 bar}

强大的断言:Groovy提供强大多样的assert,被称作power assertion statement。Groovy的强大断言能够清晰的展示验证失败时的结果。另外,它比Java更有可读性。

  1. Assert.isTrue(foo.bar.equals("hello"));

可以用Groovy这样写:

  1. assert foo.bar == "hello"

当断言失败时它会显示一个非常清晰的描述:

  1. assert foo.bar == "goodbye"
  2. |   |   |
  3. |   |   false
  4. |   hello
  5. 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状态码”:

  1. given() .accept(ContentType.HTML) .formParam("login", account.username)
  2. .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 <commit_ID>:查看所有在<commit_ID>这次提交中更改的文件。
  • git diff –name-only SHA1 SHA2:列举出在SHA1和SHA2两次提交之间所有更改的文件。
  • 在一个文件的历史提交记录中查询某个字符串:创建search.sh文件,粘贴下面代码:
  1. git rev-list --all $2 | (
  2. while read revision; do
  3. git grep -F $1 $revision $2
  4. done
  5. )

命令可以通过这种方式执行:sh ./search.sh string_to_search file_where_to_search

5.GitHub

GitHub不仅仅为我们的Git项目提供托管服务,它为代码开源并让全世界都看到做出了巨大贡献。这鼓舞了人们去尝试、去交流、去练习,很大程度提高了每个人的项目质量和大家的技术水平。

GitHub允许我们跟进我们的issue.游客可以提交新需求和报告bug。他们也可以收到我们项目进展的通知。

6.Maven

Maven已经足够出名了。所以我不会用长篇幅解释为什么我们使用Maven做构建管理。然而我可以分享几个技巧,让你的Maven更得心应手:

管理依赖:在一个多模块的项目中,你需要在根pom.xml的<dependencyManagement>标签中定义每一个依赖。一旦你这样做,所有下层模块都可以不需要指定版本。这种管理依赖的方式(比如版本升级)可以集中处理,所有下层模块都会自动识别。比如在根pom.xml:

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>io.jsonwebtoken</groupId>
  5. <artifactId>jjwt</artifactId>
  6. <version>${jjwt.version}</version>
  7. </dependency>
  8. ...  <dependencies><dependencyManagement>

下层模块的pom.xml:

  1. <dependencies>
  2. <dependency>
  3. <groupId>io.jsonwebtoken</groupId>
  4. <artifactId>jjwt</artifactId>  <!-- 注意这里没有指定版本 -->
  5. </dependency>
  6. ...<dependencies>

阻止下层模块编译:在发布的时候我们需要所有下层模块一起发布,但是我们如何避免某个模块(比如example)发布呢?很简单,只需要把下面的pom文件加入到你不想发布的模块:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-deploy-plugin</artifactId>
  4. <version>2.7</version>
  5. <configuration>
  6. <skip>true</skip>  <!-- (敲黑板)这是重点 -->
  7. </configuration></plugin>

跳过集成测试:我们有很多集成测试需要很长时间编译。这些测试确保了后端整体运行正常.在频繁的本地部署期间,我们多次因为新功能或修复bug而更改代码。并不需要每次在本地构建的时候执行这些测试,这会拖慢开发进度。因此我们要确保我们的Java SDK只在我们的CI服务器上运行的时候执行集成测试。可以通过下面方法:

根pom.xml文件:

  1. <properties>
  2. <skipITs>true</skipITs></properties>...<build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-failsafe-plugin</artifactId>
  7. <version>2.19.1</version>
  8. <configuration>
  9. <skipITs>${skipITs}</skipITs>
  10. <includes>
  11. <include>**/*IT.*</include>
  12. </includes>
  13. </configuration>
  14. <executions>
  15. <execution>
  16. <goals>
  17. <goal>integration-test</goal>
  18. <goal>verify</goal>
  19. </goals>
  20. </execution>
  21. </executions>
  22. </plugin>
  23. </plugins><build>

所以你可以想象到,所有集成测试文件以IT结尾,来保证配置正常运作,比如:ApplicationIT.groovy 或 I18nIT.groovy

然后,如果我们想让集成测试运行,我们执行以下构建:mvn clean install -DskipITs=false

7.JWT Inspector

我们的Java SDK使用JWT(JSON Web Token)通过安全可靠的方式传输数据。当我们测试排查时,我们需要分析从浏览器接收到的JWT内容。token信息可能在URL,cookie或本地储存中。JWT Inspector是一款浏览器插件,让我们可以从控制台或内置的界面解码JSON Web Token。你不需要在你的app中跟踪token信息。你只需要按一下插件的按钮,JWT Inspector会自动展示你所需要的所有信息,然后你可以复制其中任何token信息。

8.Postman

我们重度依赖REST API请求,编写REST请求并不方便,具体语法取决于我们所用的工具,比如curl或HTTPie。两者都易读,但语法难记。通常,我们需要排查问题时,我们需要测试一些请求。当出问题时,我们无法判断原因是请求还是后端。我们浪费了大量时间来怀疑我们写的请求是否正确。

Postman让书写REST API请求变得简单。它也提供很多功能,比如保存、复用请求、生成代码(java,python,curl等等),还可以批量按序执行请求。Postman通过友好的界面帮助你构建复杂的命令,你所需要做的就是填写一个表单,简直不能再棒了。

总结

使用正确的工具不仅仅帮助你节省时间提高效率,还能提高你作品的质量并享受日常工作。我们要时刻留心,发现并学习新的工具。一开始可能需要一些努力,但你总会意识到付出的时间是值得的。

来源:51CTO

每个Java开发者应该知道(并爱上)的8个工具相关推荐

  1. 每个Java开发者都应该知道的5个JDK工具

    摘要:有许许多多的JDK工具呈现在大家面前,但最常用的莫过于java.exe.javac.exe.jar等.除了这几个,还有哪些呢?大家不妨看看本文作者推荐的5个JDK工具. [编者按]JDK是Jav ...

  2. Top 10 盘点:2019 Java 开发者必学的测试框架、工具和库!

    @Java 开发者,2019 要先学点啥? 有答曰:"学习千万条,自动化测试第一条".如今,"自动化测试的重要性正在呈指数级增长",而本文便重点介绍了 10 大 ...

  3. 身为 Java 程序员必须掌握的 10 款开源工具!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:雨轩小晴 www.seoxiehui.cn/article- ...

  4. Java 程序员必须掌握的 10 款开源工具!

    来源:http://t.cn/Ai9la34A 本文主要介绍Java程序员应该在2020年学习的一些基本和高级工具.如果你是一位经验丰富的Java开发人员,你可能对这些工具很熟悉,但如果不是,现在就是 ...

  5. Java程序员必须要掌握这10种工具,缺一不可!

    如果你是一位经验丰富的Java开发人员,你可能对这些工具很熟悉,但如果不是,现在就是开始学习这些工具的好时机. NO.1 JIRA Atlassian的JIRA是当前敏捷开发领域最重要的工具之一. 它 ...

  6. 所有Java程序员必须掌握的十款开源工具!

    Java世界中存在许多工具,从Eclipse,NetBeans和IntelliJ IDEA等著名的IDE开始到Java开发人员应该知道的JVM分析和监视工具,如JConsole,VisualVM,Ec ...

  7. 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架

    虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众领域的开发者来说,依然对于国外的各种基础资源依赖还是非常的强.所以,一些网络基本技能一直都是我们需要掌握的,但是速度与稳定性问题一直也都有困扰着 ...

  8. Java开发者必读的10篇精选优秀技术文章

    作为最受欢迎的编程语言之一,Java已经走过了20个年头.从已经落寞的诺基亚到现在火热的电商系统,我们都能看到Java语言的身影.经过20年的历练,这门语言已经逐渐成熟,并经过很多大型系统的考验.社区 ...

  9. 距离 Java 开发者玩转 Serverless,到底还有多远?

    本文摘自 Spring Cloud Alibaba 开源项目创始团队成员方剑撰写的 <深入理解 Spring Cloud 与实战> 一书,主要讲述了 Java 微服务框架 Spring B ...

  10. 国内 Java 开发者必备的两个装备,你配置上了么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 虽然目前越来越多的国产优秀技术产品走出了国门,但是对于众 ...

最新文章

  1. C语言里面%2d 意思
  2. Mina airQQ聊天 client篇(三)
  3. 1.16 快速排序法(Quicksort)
  4. Java连接MySQL数据库 报错
  5. 对使用CodeSmith模板生成NHibernate的代码的分析
  6. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp
  7. Lync 小技巧-17-查询Lync 2013聊天记录
  8. linux 安装simg2img,linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像)...
  9. php 代码格式化命令,go fmt命令——格式化代码文件
  10. linux怎样打开终端命令,Linux命令-初学者入门之打开终端
  11. Python实现简单p2p下载
  12. 读取npy格式的文件
  13. 文献学习(part102-A)--Autoencoders
  14. 【Scratch 3.0游戏】—— 乒乓弹球游戏
  15. 台式计算机开机慢,台式机电脑开机启动半天才能开机怎么回事_台式机电脑开机启动慢很久如何解决-系统城...
  16. 高中数学40分怎么办_高一数学考40分还能拯救吗
  17. [独家提供][亲自制作]完美ie8绿色中文版版支持win7x64
  18. 网页调用 iOS/Android 客户端
  19. 李成名:科学就是较真 数字城市/智慧城市就是跑马圈地
  20. 探究js中arguments

热门文章

  1. STL之map容器的详解
  2. Windows Phone 7 MVVM模式的学习笔记
  3. 关于嵌套类的调用更新问题
  4. 国产达梦数据库管理系统-通过Excel文件导入数据
  5. AI YOLO目标检测算法
  6. coolite 获取新的页面链接到当前页面指定位置Panel的运用
  7. STemWin5.22在STM32F103上的移植步骤
  8. BZOJ 2440 【中山市选2011】 完全平方数
  9. 我对hibernate的对象的3种状态的理解
  10. PWM DAC vs. Standalone