国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > 每个 Java 开发者应该知道(并爱上)的 8 个工具

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

来源:程序员人生   发布时间:2017-03-15 09:19:12 阅读次数:4210次

学习Java的同学注意了!!! 
学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990  我们1起学Java!


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

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

1.Groovy

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

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

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 允许我们访问私有变量 bar
}

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

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

可以用Groovy这样写:

assert foo.bar == "hello"

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

assert foo.bar == "goodbye"
       |   |   |
       |   |   false
       |   hello
       Foo@12f41634

Mocking:使用Java时,动态摹拟框架(如:EasyMock,PowerMock和Mockito)非常流行,这些框架可以在Groovy下方便的使用。耶!

2.支持REST风格

我们的后端提供REST API服务来创建和管理账户,众多SDK中,我们的Java SDK提供特定语言客户端模型做简单交互。其中1些SDK也提供网页来和后端交互,从而不用编写代码。

为了保证网络框架的互操作性,它们必须表现的1样。因此我们需要创建1系列基于HTTP的测试。这是我们的兼容性测试工具。这个项目由我们的SDK工程师保护,他们精通不止1种语言。因此我们需要跨语言测试工具,谢天谢地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校验,我们需要开启我们其中1个Web服务,以便测试在上面履行。讲道理的话,我们需要每次构建时自动测试,Gargo Plugin就是为此而生。

Cargo用标准的方式简单封装各种利用容器。我们使用Cargo可以绝不费力的在不同的Servlet容器(比如Jetty和Tomcat)中运行我们的代码。我们只需要在我们的pom文件中配置Cargo Maven2 Plugin来启动1个Servlet容器(Tomcat7),在测试阶段编译最近的War包,你可以在我们的Servlet插件例子中看到配置。

4.Git

我们能讨论哪些关于Git你不了解的事情呢?想要深入了解Git,你可以看他们的About页。

我们的Java SDK团队遍及全球,而且彼此之间几近从未坐在1起。Git保障了我们写的每行代码,这里有1些非常棒的命令,节省了我们大量的时间:

  • 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两次提交之间所有更改的文件。
  • 在1个文件的历史提交记录中查询某个字符串:创建search.sh文件,粘贴下面代码:
git rev-list --all $2 | (
    while read revision; do
        git grep -F $1 $revision $2
    done
)

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

5.GitHub

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

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

6.Maven

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

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

<dependencyManagement>
  <dependencies>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>${jjwt.version}</version>
     </dependency>
     ...
  <dependencies>
<dependencyManagement>

下层模块的pom.xml:

<dependencies>
  <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>  <!-- 注意这里没有指定版本 -->
  </dependency>
  ...
<dependencies>

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

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

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

根pom.xml文件:

<properties>
    <skipITs>true</skipITs>
</properties>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skipITs>${skipITs}</skipITs>
                <includes>
                    <include>**/*IT.*</include>
                </includes>
            </configuration>
            <executions>
               <execution>
                   <goals>
                       <goal>integration-test</goal>
                       <goal>verify</goal>
                   </goals>
               </execution>
            </executions>
        </plugin>
  </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是1款阅读器插件,让我们可以从控制台或内置的界面解码JSON Web Token。你不需要在你的app中跟踪token信息。你只需要按1下插件的按钮,JWT Inspector会自动展现你所需要的所有信息,然后你可以复制其中任何token信息。

8.Postman

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

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

总结

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

学习Java的同学注意了!!! 
学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990  我们1起学Java!

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生