注释是否应包含在代码覆盖范围内?

时间:2012-03-15 14:32:34

标签: java unit-testing annotations code-coverage

这些问题是相当不言自明的。

各种(java)代码覆盖工具如何处理注释?它们被视为代码并包含在覆盖率报告中吗?它们并非完全“可执行”,所以我对它们将如何被对待感到困惑。

PS:顺便说一下,我已经用Google搜索过了,关于这个主题的内容并不多!

1 个答案:

答案 0 :(得分:1)

简短的回答是,注释是元数据,因此它们不是可以涵盖的代码的一部分。不过要考虑一下。 根据您使用的技术,应该包含在代码覆盖中以及可以包含的内容可能完全不同。

大多数覆盖工具(我知道cobertura和ECLEmma)从未真正查看源代码,他们会查看字节码。并非您在源文件中看到的每一行都与.class文件的可执行部分中的任何内容相对应。

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

这样的东西
@MyAnnotation
class MyClass ...

不可执行。放在那里的注释没有可执行的方面。所以它无法涵盖。到目前为止,这是非常肯定的。

从这里开始,我猜测了一下。注释可以包含可以查询的数据字段。我不知道编译器是否为它生成了getter方法(原则上是可以覆盖的代码),或者它们是否是由调用者直接读取的公共字段。