在Stormpath(用户管理和身份验证服务),我们非常重视质量和效率。对于任何优秀的工匠来说,光有天赋是不够的,你还需要适合你工作的工具。工程不仅仅是一门科学,更是一门艺术。因此,在Stormpath,尽管我们才华横溢,但我们一直在寻找我们需要的有用工具。我们的工程师总是渴望与团队的其他成员分享新工具。现在,让我们向所有有才华的Java开发人员推荐该工具。在这篇文章中,我将分享我们Java团队日常使用的工具,如何使用它们,并分享一些有用的技巧。1.Groovy我们使用Groovy来编写Java测试。为什么?因为它提供了以下功能:宽松的Java语法:这是Java语法,但是一些其他规则,例如分号、变量类型和访问修饰符是可选的。后者对测试很有意义,因为访问修饰符不严格,您的测试可以读取和断言类内部的状态。例如,假设有如下类:publicclassFoo{privateStringbar=null;publicvoidsetBar(Stringbar){this.bar=bar;}}如果要测试setBar(String)方法是否正常(即bar的值可以正确修改),您可以使用Groovy轻松读取变量值。这样的操作在Java中是不允许的(只要不涉及Java的反射机制)。@Testpublicvoidtest(){deffoo=newFoo()foo.setBar("hello")Assert.isTrue(foo.bar.equals("hello"))//groovy允许我们访问私有变量bar}强大的断言:Groovy提供强大的各种断言被称为强大的断言语句。Groovy强大的断言清楚地显示了验证失败时会发生什么。另外,它比Java更具可读性。Assert.isTrue(foo.bar.equals("你好"));在Groovy中可以这样写:assertfoo.bar="hello"断言失败时会显示很清晰的描述:assertfoo.bar="goodbye"|||||false|helloFoo@12f41634Mocking:WhenusingJava,dynamicmocking框架(例如:EasyMock、PowerMock和Mockito)非常流行,这些框架可以在Groovy下方便地使用。耶!2.支持REST风格。我们的后端提供RESTAPI服务来创建和管理帐户。在众多SDK中,我们的JavaSDK提供了一种特定语言的客户端模型,用于简单的交互。其中一些SDK还提供了网页,无需编写代码即可与后端进行交互。为了使Web框架能够互操作,它们的行为必须相同。所以我们需要创建一系列基于HTTP的测试。这是我们的兼容性测试工具。该项目由我们精通一种以上语言的SDK工程师维护。所以我们需要跨语言的测试工具,谢天谢地,高枕无忧了。Rest-assured是一种用于测试REST服务的Java领域特定语言(DSLdomain-specificlanguage)。它易于使用和学习,即使对于没有使用过Java的开发人员来说,它也非常强大。它提供高级功能,例如配置详细信息、过滤器、自定义分析、跨站点请求伪造(CSRF)和OAuth2.0。它提供了一个非常简单的语法:given-when-then。例如:让我们看看它如何验证“向/login路径发送认证后信息请求返回302状态码”:given().accept(ContentType.HTML).formParam("login",account.username)。formParam("password",account.password).when().post(LoginRoute).then().statusCode(302)您可以在我们的TCKrepo3.Cargo插件中看到更多放心测试,以便让我们的JavaSDK针对TCK进行了验证,我们需要启动我们的Web服务之一,以便在其上执行测试。讲道理,我们每次构建都需要自动测试,GargoPlugin就是为此而生。Cargo只是简单地以一种标准的方式包装各种应用程序容器。我们使用Cargo在不同的Servlet容器(如Jetty和Tomcat)中毫不费力地运行我们的代码。我们只需要在我们的pom文件中配置CargoMaven2Plugin来启动一个Servlet容器(Tomcat7),在测试阶段编译最新的War包,你可以在我们的Servlet插件示例中看到配置。4.Git关于Git有什么你不知道的?要了解有关Git的更多信息,您可以查看他们的关于页面。我们的JavaSDK团队遍布全球,几乎从不坐在一起。Git保证我们编写的每一行代码,这里有一些很棒的命令可以为我们节省大量时间:gitmv--forcefoo.javaFoo.java:在区分大小写的文件系统上更改文件名很麻烦是的,这个命令使git意识到foo.java被重命名为Foo.javagitdiff-tree–no-commit-id–name-only-r
