我尝试使用 jmockit 1.18 来模拟静态方法,但我担心代码覆盖率。我得到的错误是:
java.lang.instrument.IllegalClassFormatException:同时出错 仪表类org / junit / runner / notification / RunNotifier
我使用的是 jacoco agent 0.6.3.201306030806 和 EclEmma core 2.2.1.201306092145 。
答案 0 :(得分:0)
较早版本的JaCoCo(在0.7.3之前 - 在链接页面中搜索" jmockit")会与其他字节码修改工具(例如JMockit)发生冲突。
因此,如果您将EclEmma升级到使用JaCoCo 0.7.3+的版本,它应该没问题。
另一方面,IllegalClassFormatException
指向JUnit的RunNotifier
类,JMockit在运行时修改(用于集成),但JaCoCo 不应该1}他们正在修改。所以,在这里你可能需要从JaCoCo检测中排除这样的类(参见JaCoCo / EclEmma文档)。
答案 1 :(得分:-1)
我担心代码覆盖率
您可能会遇到几乎任何允许模仿private
/ final
类和static
/ private
/ final
成员的模拟框架。原因是模拟框架改变了实际测试的运行时的字节代码,而覆盖工具在开始之前改变字节代码测试。
更好的方法是更改代码,使其不使用静态访问成员而不使用方法final
(通常)。此外,如果您正确实施分离关注,单一责任,单层抽象*和依赖注入,您可以更轻松地编写工作测试...