Java 注释应该包括在代码覆盖范围内吗?

Java 注释应该包括在代码覆盖范围内吗?,java,unit-testing,annotations,code-coverage,Java,Unit Testing,Annotations,Code Coverage,这些问题是不言自明的 各种(java)代码覆盖工具如何处理注释?它们是否被视为代码并包含在覆盖率报告中?它们并不完全是“可执行的”,所以我对如何对待它们有点困惑 顺便说一句,我已经在谷歌上搜索过了,关于这个话题的内容不多 简而言之,注释是元数据,因此它们不是可以涵盖的代码的一部分。不过,还有一点需要考虑。 代码覆盖范围中应该包含的内容和可以包含的内容可能会有很大的不同,这取决于您使用的技术 大多数覆盖工具(我知道cobertura和ECLEmma)从未真正研究过源代码,而是研究字节码。并非源文件

这些问题是不言自明的

各种(java)代码覆盖工具如何处理注释?它们是否被视为代码并包含在覆盖率报告中?它们并不完全是“可执行的”,所以我对如何对待它们有点困惑


顺便说一句,我已经在谷歌上搜索过了,关于这个话题的内容不多

简而言之,注释是元数据,因此它们不是可以涵盖的代码的一部分。不过,还有一点需要考虑。 代码覆盖范围中应该包含的内容和可以包含的内容可能会有很大的不同,这取决于您使用的技术

大多数覆盖工具(我知道cobertura和ECLEmma)从未真正研究过源代码,而是研究字节码。并非源文件中看到的每一行内容都对应于.class文件可执行部分中的任何内容

注释使这变得更加复杂,因为有些注释只是源代码中的元数据,有些注释被编译并保存在字节码中。当然,仅仅是元数据的注释不应该被视为代码,所以它们不应该包含在覆盖率信息中。即使是保存在二进制文件中的注释也不应直接被视为要覆盖的代码。差不多

@MyAnnotation
class MyClass ...
是不可执行的。放在那里的注释没有可执行方面。所以它不能被覆盖。到目前为止,这是相当肯定的


从现在开始,我有点猜测。批注可以包含可以查询的数据字段。我不知道编译器是否会为此生成getter方法(原则上是可以涵盖的代码),或者它们是否是由调用方直接读取的公共字段。

那么您希望在注释中查看什么?什么都没有!我指的是,就代码覆盖率度量而言,一行“注释”是否被视为一行代码,如果是,那么当它不是严格可执行的时候,如何获得覆盖率。例如,JSR验证注释仅由验证器在处理bean时使用,而不是bean本身(本质上是它自己的单元测试)。不需要为注释生成覆盖率,因为它只是元数据。@Pangea问题不是注释是否应该包含在相对行覆盖率中,如果覆盖率工具中包含了这些内容,则情况会有所不同。在这一点上,我同意你的观点,但是把问题读得更清楚。唯一的测试方法就是对他们做些什么。注释本身没有语义意义——它们只有在您使用它们时才有意义。所以,测试一下。