0

我正在关注本指南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 核心和库类有什么用?

4

3 回答 3

1

我是这两个库的提交者。JMock 依靠 hamcrest 来帮助它决定是否需要调用一个对象。我建议只使用 hamcrest-all jar。hamcrest 核心和库之间的分离是将匹配和报告差异的基本行为与最常见情况的方便实现分开。

最后,如果您使用的是 hamcrest,我建议您使用 junit-dep jar 以避免与 junit.jar 中包含的 hamcrest 的某些功能发生冲突

于 2012-04-29T09:21:17.493 回答
0

JUnit 用于进行单元测试以测试您的方法。JMock 用于在上下文中测试您的程序,您必须知道您期望发送到上下文 (ENV) 的内容以及回答上下文的内容。

JMock 使用 JUnit,这就是为什么为了避免依赖冲突,需要在 JUnit 之前包含它。

如果您需要使用 JMock 脚本或 JMock 核心中不可用的任何其他功能,则 JMock 的 10 个库是一种附加组件。

您无需了解 Hamcrest 核心库即可使用 JMock。只需按照网站上的指南(不要使用 JMock 版本 1)并以正确的顺序组织您的库(JUnit 应该放在最后以避免您的错误)

于 2012-04-26T08:39:57.790 回答
0

模拟框架 licke jmock 在幕后做了一些黑魔法(包括但不限于运行时字节码操作)以提供模拟方法类等。为此,需要对基本的 junit 类进行一些调整,唯一的方法是在加载 JU 类之前将自己注册为 java 代理。

此外,将您的模拟框架放在类路径中的 junit 之前

于 2012-04-26T09:08:17.617 回答