使用jmockit

时间:2017-03-23 10:30:19

标签: java unit-testing junit jacoco jmockit

我尝试使用 jmockit 1.18 来模拟静态方法,但我担心代码覆盖率。我得到的错误是:

  

java.lang.instrument.IllegalClassFormatException:同时出错   仪表类org / junit / runner / notification / RunNotifier

我使用的是 jacoco agent 0.6.3.201306030806 EclEmma core 2.2.1.201306092145

2 个答案:

答案 0 :(得分:0)

较早版本的JaCoCo(在0.7.3之前 - 在链接页面中搜索" jmockit")会与其他字节码修改工具(例如JMockit)发生冲突。

因此,如果您将EclEmma升级到使用JaCoCo 0.7.3+的版本,它应该没问题。

另一方面,IllegalClassFormatException指向JUnit的RunNotifier类,JMockit在运行时修改(用于集成),但JaCoCo 不应该排除这样的类(参见JaCoCo / EclEmma文档)。

答案 1 :(得分:-1)

  

我担心代码覆盖率

您可能会遇到几乎任何允许模仿private / final类和static / private / final成员的模拟框架。原因是模拟框架改变了实际测试的运行时的字节代码,而覆盖工具在开始之前改变字节代码测试。

更好的方法是更改​​代码,使其不使用静态访问成员而不使用方法final(通常)。此外,如果您正确实施分离关注单一责任,单层抽象*和依赖注入,您可以更轻松地编写工作测试...