在Stormpath,我们非常重视质量和生产率。 任何优秀的工匠已经知道,光有天赋是不够的,还需要正确的工具。 工程不仅仅是一门科学,也是一门艺术,所以虽然我们无疑有人才(wink眨眼)Stormpath,我们总是希望补充的工具最适合我们的需要。 我们的工程师总是渴望与团队的其他成员分享的新工具。 现在,所有的其他有才华的Java开发人员!
在这篇文章中,我将分享我们的Java SDK团队所使用的工具的日常任务,我们如何使用它们,希望分享一些技巧,这些技巧会对你有用。
1。 Groovy
而不是用Java编写我们的测试,我们这样做Groovy。 为什么? 好吧,免费提供所有这些功能:
放松类java语法:它是Java语法,但用更少的规则。 例如分号、变量类型和访问修饰符都是可选的。 后者有一个巨大的利益进行测试。 因为访问修饰符是不严格的,您的测试可以阅读和维护被测试类的内部状态。 例如,让我们假设您有这类:
如果你想测试的setBar(String)方法好(这意味着它适当的价值变化私人所谓的bar)您可以简单地通过阅读与Groovy,变量的值。 Java不允许这样的(至少不是没有采取反射)。
权力的断言Groovy提供了一个强大的变体assert也被称为power assertion statement。 Groovy的权力维护清楚显示评价结果验证失败。 另外,它比Java更具有可读性。
这可以翻译成:
断言失败时它会显示一个非常明确的描述发生了什么:
嘲笑:当使用Java、动态模拟框架(如EasyMock,PowerMock和5很受欢迎。 所有这些与Groovy框架可以轻松使用。 耶!
2。 请放心
我们的后端提供了一个REST API服务创建和管理用户帐户。 我们的Java SDK许多不同的sdk之一提供一个特定于语言的客户端模型简化交互。 还有些sdk提供web层与后台交互,而不需要编写任何代码。
为了保证互操作性在所有这些web框架,他们必须完全相同的行为。 因此我们不得不创建一组基于http的集成测试,每一个框架是对进行验证。 这是我们的兼容性测试套件。 这个项目是由我们所有的SDK维护工程师,而不是他们掌握相同的编程语言。 因此我们必须使用一个语言无关的测试工具。 这是当请放心前来救助。
放心是一个简单的Java DSL(领域特定语言)测试REST服务。 不仅是非常简单的使用和开始使用,即使是从未使用过Java开发人员,这也是令人难以置信的强大。 它提供高级功能(如详细配置、过滤器、自定义解析器对象,CSRF和OAuth 2.0。 这是从头构建提供一个非常简单的语法:given-when-then。
例如:让我们看看是多么容易验证”一篇文章与有效身份证件/登录必须返回状态代码302”:
你可以看到很多不同的放心在我们的测试TCK回购。
3所示。 货物插件
为了我们的Java SDK验证了TCK我们需要开始我们的Web的例子之一可以对它执行这些测试。 从逻辑上讲,我们希望每一个构建验证自动发生。货物插件是用于这一目的。
货物是一个瘦包装器来操纵各种类型的应用程序容器以标准方式。 货物,我们可以运行我们的例子不同的Servlet容器(比如Jetty和Tomcat)相当轻松。 我们只是配置了货物Maven2插件在我们的pom文件启动Servlet容器(Tomcat 7)最近建造和部署War文件在集成测试阶段。 你可以看到在我们的配置工作Servlet插件的例子。
4所示。 Git
我们能说什么呢Git你不知道了吗? 为深入研究Git的好处,你可以简单地了解他们的页面。
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粘贴:
然后可以执行的命令如下:sh ./search.sh string_to_search file_where_to_search
5。 GitHub
GitHub为我们的Git项目不仅提供免费托管,也开放源代码的无价的好处,让全世界都可以看到它。 这鼓励人们尝试,与我们交流,并参与,最终提高每个人的项目的质量和成长我们所有的技术知识。
GitHub也允许我们我们的跟踪问题。 客户可以提交特性请求并报告错误。 他们取得的进步,我们也可以通知有关。
6。 Maven
Maven已经是著名的足够的,所以我不会给你生了一个长期的解释为什么我们使用Maven来照顾我们的构建过程。 然而,我可以分享一些有用的技巧来获得更多的Maven:
巩固依赖性:在多模块项目你应该定义每一个依赖的根pom.xml在<dependencyManagement>标签。 一旦你这样做,所有的子模块可以依赖这些依赖项,而无需指定它们的版本。 这种方式管理你的依赖关系(e。 g,更新版本)可以在一个集中的地方,和所有的子模块将自动变化。 例如,根pom.xml:
Sub-module的pom.xml:
防止sub-module部署:在释放时间我们希望我们所有的子模块被释放,但是我们如何避免sub-module(像一个例子)被释放了吗?。 简单,就是pom文件中添加以下你不想发布的模块:
跳过集成测试:我们有很多集成测试需要很长时间才能完成。 这些测试验证与后台的交互是否工作正常。 普通地方发展期间,我们多次修改代码之前,新特性或bug修复完成。 没有需要这些中间地方构建每次根据后端进行验证,这将大大减缓开发过程。 因此,我们已经配置了Java SDK自动运行其只有在我们建立运行CI服务器。 你可以做同样的事情是这样的:
在你的根pom.xml文件:
你可以想象,所有的集成测试文件必须以字母后缀IT这个配置工作。 例如,ApplicationIT.groovy或I18nIT.groovy。
然后,当我们想要它的运行,我们执行构建这样的:mvn clean install -DskipITs=false。
7所示。 JWT检查员
我们使用Java SDK中jwt很严重的交通数据安全和无故障。 测试和故障排除时,我们需要分析的内容jwt,我们得到在浏览器中。 这些标记可以在URL中,饼干,或在本地存储。JWT检查员是我们构建了一个浏览器扩展来帮助我们解码并检查JSON Web标记直接从控制台或内置的UI。 你不需要跟踪这些令牌在你的应用程序,您只需按下扩展按钮和智威汤逊检查员将自动显示所有你需要的信息。 你可以复制任何索赔的令牌需要扩大。
8。 邮递员
我们工作很严重和REST API请求。 编写REST请求并不总是友好的; 实际的语法取决于我们使用的工具,如旋度或HTTPie。 都是非常可读的但有时很难记住准确的语法。 此外,当故障排除,我们需要测试一些请求和他们的结果。 当他们失败时我们不确定这个问题是否在请求或端点本身。 我们最终失去的时间,因为我们怀疑的正确性要求写作。
邮递员使编写简单的REST API请求。 它还提供了许多有价值的特性,如储蓄和重用请求,生成代码(java、python、卷、等等),和分组请求按顺序运行它们。 邮差可以帮助您构建复杂commmands由于其用户友好的界面。 你所要做的是完成一个形式。 能比这更好的吗?
最终的想法
使用正确的工具,不仅可以节省时间和减少努力,它还可以提高你的产品的总体质量,使日常工作更有乐趣。 我们应该总是打开发现和学习新工具。 它可能需要一些努力,但你很快就会意识到这是绝对值得你投资的时间。
推荐一个交流学习群:478030634 里面会分享一些资深架构师录制的视频录像:
有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,
JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多: