代码检查又一利器:ArchUnit

Code Review老是让人又爱又恨,它能够帮助咱们在提测以前发现不少代码中比较“丢人”的问题,可是,Code Review一般会比写代码更加耗费精力,由于你须要理解别人的代码,而为了这一目的,每每须要不少次的沟通。 html

人们常说“见字如面”。我认为代码也是同样,看到一我的的代码,就会对这我的有一个大概的印象。例如,当你看到一段代码写的很是随意,随意的格式、随意的命名、随意的封装,而后又没有单元测试,那咱们通常会认为这段代码的做者是一个不够严谨、作事随意、有些懒惰,又对本身的代码责任心不强的人。若是你不是这样的人,那就须要花费更多的力气向同事证实本身。而若是在代码中作好每个细节,严格遵循编码规范,单元测试覆盖率比较高,那么同事对你的第一印象必定是这我的仍是比较可靠的,跟他合做应该比较愉快。java

说了这么多,其实就是想强调Code Review的重要性。那么既然它这么重要,但又给咱们带来了更大的工做量。做为程序员,咱们必定会想,能不能自动化?答案固然是能够。事实上如今也有不少公司实现了自动化,例如自动进行静态代码分析来确保代码质量,利用相似Cobertura这样的工具来检查单元测试覆盖程度等等。可是这并不能彻底保证代码的整洁性和可靠性。git

有了这些工具以后Code Review轻松了许多,可是这些工具的安装、使用也是须要花费很高的成本的。因此我想给你们介绍的是一个使用简单、方便的工具来帮我完成这些任务。在介绍以前,咱们先来想想咱们平时在Review别人代码时可能会注意哪些问题。这里我简单列出来了一些:程序员

  • 抛出的异常不能太过普遍
  • 不能写System.out,而是要用日志输出
  • 不能使用java.util.logging
  • 若是使用贫血模型开发,每一个类须要放到对应的包中
  • 接口不能放在实现类的包中
  • Service层代码不能访问Controller层代码
  • 合理使用第三方库

这些事情之前咱们都是靠人工来检查,直到我发现了ArchUnit这个库。感受像是抓住了自动化道路上的救命稻草。github

什么是ArchUnit?

ArchUnit的官方网站是 https://www.archunit.orgbash

官网中原话介绍是架构

ArchUnit is a free, simple and extensible library for checking the architecture of your Java code using any plain Java unit test framework.框架

意思是ArchUnit是一款免费、简单可扩展的库,它可使用任何Java单元测试框架来检查Java代码的架构。maven

也就是说,它的主要功能是用来检查代码结构的。那么怎么使用呢?ide

如何使用?

ArchUnit的简单绝对不是空谈,若是你是maven项目,只须要在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.tngtech.archunit</groupId>
    <artifactId>archunit</artifactId>
    <version>0.12.0</version>
    <scope>test</scope>
</dependency>

若是你是Gradle项目,使用起来一样很是简单

dependencies {
    testCompile 'com.tngtech.archunit:archunit:0.8.0'
}

当你添加了依赖之后,就能够为咱们前面提到的规则写测试用例了。

固然,也有一些内建的通用规则,它们定义在

com.tngtech.archunit.library.GeneralCodingRules

这个类中。关于内建规则的细节,能够查看官方文档

自定义规则

除了内建规则之外,ArchUnit也支持你定义本身须要的规则,至于如何定义规则,文档中都有详细的介绍。固然,也能够参考这个例子来写一些规则。 https://github.com/TNG/ArchUnit-Examples

如何执行

规则定义好之后如何执行呢?咱们说ArchUnit使用起来很是简单,若是须要测试,对maven项目来讲只须要执行命令

mvn test

而对于Gradle项目来讲,只要执行命令

gradle test

总结

ArchUnit看起来是一个很酷的三方库,我并无在使用层面作过多介绍,由于我也在摸索中,感兴趣的朋友能够和我一块儿交流。

相关文章
相关标签/搜索