java - 使用 EasyMock 编写 Junit 时遇到 RunTimeError?

标签 java junit

我正在为我的程序使用简单的模拟编写junit。下面是测试方法

public static void doBeforeEachTestCase() {

private static FibanocciProg mock;

mock = EasyMock.createMock(FibanocciProg.class);

     FibanocciProg testObject= new FibanocciProg();

    EasyMock.expect(mock.recursionFib1(6)).andReturn(50);
    EasyMock.replay(mock);
    int actual = testObject.recursionFib1(6);

 }

我在 EasyMock.createMock 时遇到以下错误。我下载的用于轻松模拟的库是:- easymock-3.0、cglib-2.2.2、asm-4.0_RC2

Exception in thread "main" java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at net.sf.cglib.core.AbstractClassGenerator.<init>(AbstractClassGenerator.java:38)
at net.sf.cglib.core.KeyFactory$Generator.<init>(KeyFactory.java:127)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:112)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:259)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:174)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:60)
at org.easymock.EasyMock.createMock(EasyMock.java:104)
at TestMock.doBeforeEachTestCase(TestMock.java:19)
at TestMock.main(TestMock.java:13)

有什么指示吗?

最佳答案

您的 Easymock 依赖项版本错误。看着maven pom for EasyMock 3.0 ,依赖项是:

  <dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.2</version>
  </dependency>
  <dependency>
    <groupId>org.objenesis</groupId>
    <artifactId>objenesis</artifactId>
    <version>1.2</version>
  </dependency>

EasyMock documentation :

Requirements

  • EasyMock only works with Java 1.5.0 and above.
  • cglib (2.2) and Objenesis (1.2) must be in the classpath to perform class mocking

所以您使用的是版本 2.2.2 而不是 2.2。 java.lang.VerifyError 通常发生在您针对一个库进行编译但随后针对该库的另一版本执行时。

查看Reasons of getting a java.lang.VerifyError的答案以及 java.lang.VerifyError 的 javadoc

注意:要查找上述依赖项详细信息,您只需搜索 Maven Search .

关于java - 使用 EasyMock 编写 Junit 时遇到 RunTimeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7620435/

相关文章:

java - JNI 回调调用失败

java - 从 Mockito 切换到 JMockit

java - 如何测试具有不同异常和结果的方法?

ant - Apache Ant 教程的问题 - JUnit

java - 如何使用 ImageView 调用电话?

java - JPanel自定义背景

java - JBoss 在 war 文件中使用 @WebService 和 @Stateless 时忽略 application.xml 中的上下文路径

java - Mockito 中 verifyNoMoreInteractions 和 verifyZeroInteractions 之间的区别

java - Mockito:多次调用同一个方法

java - 如何编写使用Azure SDK的测试?