我正在关注本指南http://javaeenotes.blogspot.com/2011/06/short-introduction-to-jmock.html
我收到了错误
java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer information of other classes in the same package.
在指南中,作者说:
解决方案是确保在之前包含jMock库 构建路径中的标准jUnit库。
构成“标准jmock库”和“junit库”的是什么? Junit只有一个罐子,所以很容易,但是jmock有10个以上不同的罐子。
我一直在使用:j-unit4.10,jmock-2.5,hamrest-core和hamcrest-library
什么是hamcrest核心和库类?
答案 0 :(得分:1)
我是这两个图书馆的提交者。 JMock依赖于hamcrest来帮助它决定是否需要调用对象。我建议只使用hamcrest-all jar。 hamcrest核心和库之间的分离是将匹配和报告差异的基本行为与最常见案例的方便实现分开。
最后,如果您正在使用hamcrest,我建议您使用junit-dep jar来避免与junit.jar中包含的hamcrest的某些功能发生冲突
答案 1 :(得分:0)
JUnit用于进行单元测试以测试您的方法。 JMock用于在上下文中测试您的程序,您必须知道您希望发送到上下文(ENV)的内容以及将回答上下文的内容。
JMock使用JUnit,这就是为什么,为了避免依赖冲突,你需要在JUnit之前包含它。
如果您需要使用JMock脚本或JMock核心中没有的任何其他功能,则JMock的10个库是一种附加组件。
您无需了解Hamcrest核心库即可使用JMock。只需遵循网站上的指南(不要使用JMock的第1版)并按正确的顺序组织您的库(JUnit应该是最后的,以避免您的错误)
答案 2 :(得分:0)
模拟框架licke jmock在幕后做了一些黑魔法 (包括但不限于运行时字节码操作) 提供模拟方法类和其他什么。为了能够做到这一点, 基本的junit类中的一些调整是必要的,唯一的方法是执行此操作 在加载JU类之前将自身注册为java代理。
另外,在classpath
中将你的模拟框架放在junit之前