【问题标题】:eclEmma - full code coverage on class header?eclEmma - 类头的完整代码覆盖?
【发布时间】:2011-02-25 15:39:16
【问题描述】:

我有一门课,开头是:

public class GeneralID implements WritableComparable<GeneralID>{
...
}

还有一个是:

public class LineValuesMapper<KI, VI, KO, VO> extends Mapper<LongWritable, Text, Text, IntWritable>{
...
}

涵盖了这些类中的所有方法。但不是他们的头。使用 EclEmma 将两个类的标题都涂成黄色。

这些类的涵盖说明是:

Element Coverage    Covered Instructions    Total Instructions
LineValuesMapper.java   97.3 %  145 149
GeneralID.java  99.3 %  566 570

我能做些什么来完全覆盖类头吗?

【问题讨论】:

  • EclEmma 也应该在编辑器下方的小窗格中为您提供覆盖数字。那些说什么?您可以发布示例课程的数字(块、行、说明等)吗?
  • 此外,这两个类都实现或扩展了参数化类型。这种行为是否在定义中不使用泛型的类中表现出来?
  • 这只发生在这两个扩展/实现参数化类型的类中。我有其他完全覆盖相同情况的课程。不同的是其他类的参数化类型是我自己定义的。这些类型在 Hadoop API 中定义。我在上面的问题中添加了涵盖的说明。
  • “标题”是什么意思?是文件的第一行,还是包含public class 声明的行?

标签: java unit-testing emma


【解决方案1】:

对于扩展泛型超类或实现泛型接口的类,编译器可能会添加合成桥接方法。类似案例见the results of looking at the bytecode

也许在你的类中,这些桥接方法没有被调用。 OTOH,我刚刚读到 Emma 有一个选项可以忽略默认启用的合成或桥接方法。

【讨论】:

  • 我之前正在为这个答案绞尽脑汁。接得好。 Emma 可能有这个选项,但我不记得 EclEmma 在 Eclipse 中驱动 Emma 时是否使用它。
  • 沿着这些思路,Enums 显然也对 Emma 有一些问题 (padcom13.blogspot.com/2009/12/code-coverage-and-enum-types.html)。也许 Fork 可以找到类似的解决方法?
  • 在哪里禁用它?我注意到我上面提到的两个类都使用了我在其他地方定义的枚举。我正在尝试测试枚举,但没有运气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多