【问题标题】:How can I exclude a methods (hashcode and equals) from the clover coverage report?如何从三叶草覆盖率报告中排除方法(哈希码和等号)?
【发布时间】:2012-01-03 10:51:05
【问题描述】:

我想从 clover 报告中排除 hashCodeequals
一些配置示例会很好。

【问题讨论】:

  • 您为什么不想测试这些方法?我认为这是一个错误。
  • 您找到解决方案了吗?如果能分享一下就太好了
  • no....仍然没有解决方案,实际上我现在已经忽略了这个问题....

标签: java clover


【解决方案1】:

我想从 clover 报告中排除 hashCode 和 equals。

我会恭敬地建议您实际测试这些方法,而不是避免它们。如果它们与规范不一致,可能会出现严重的错误。我在写得很糟糕的hashCodeequals 方法中也遇到过NPE 和其他问题。这是一个很好的链接,其中包含您可以测试方法的多种方式:

How should one unit test the hashCode-equals contract?

我们使用以下LocalEqualsHashCodeTest,可以通过单元测试进行扩展:

http://pastebin.com/L03fHAjv

然后定义一个 createInstance() 方法返回您的类的一个实例,并定义一个 createNotEqualInstance() 方法返回另一个不等于第一个实例的实例。

【讨论】:

  • 我没有问什么时候测试 equals/hashcode 是有意义的,或者如何去做,而是如何从 clover 中排除它们
  • 没关系@MaciejMiklas。我只是想给你一个不同的看待事物的方式。关于 SO 的大量答案并没有解决具体问题,而是鼓励发布者以不同的方式看待它。事实是我不知道,但我认为不测试它们是一种不好的做法。
  • 有趣的是,我来这里是为了寻找一种从我的 cobertura 网站报告中排除哈希码和 equals 的方法,但实际上你的方法(使用该实用程序类测试它们)似乎要好得多。那谢谢啦! (顺便说一句,我不明白为什么 OP 对你的回答如此苛刻......)
【解决方案2】:

你必须做两个步骤:

1) 在 任务中定义方法上下文,其中包含要匹配的方法的正则表达式,例如:

<clover-setup ...>
    <methodContext name="equals" regexp="public boolean equals\(.*\)"/>
    <methodContext name="hashCode" regexp="public int hashCode\(\)"/>
</clover-setup>

2) 在 任务中定义哪些方法上下文应从报告中排除

<clover-report>
   <current outfile="clover_html" title="My Coverage">
     <format type="html" filter="equals,hashCode"/>
   </current>

更多信息:

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2011-11-26
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多