java.lang.ClassFormatError:尝试使用Mockito模拟HttpServletRequest时

时间:2013-01-30 22:24:38

标签: java eclipse java-ee junit mockito

我在Eclipse中运行一些单元测试,我使用Mockito模拟如下: -

    HttpServletRequest mockRequest = mock(HttpServletRequest.class);

当我从Eclipse中的运行测试时,我得到以下堆栈跟踪

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

但是,当使用maven

从命令行运行时,我没有收到任何此类错误

我在其他地方看过类似的问题,我已经确定我有实施jar而不仅仅是API jar。我的maven依赖如下

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.servlet</artifactId>
        <version>10.0-b28</version>
        <scope>test</scope>
    </dependency>

我花了太多时间在这上面,摆弄我的类路径并多次清理我的工作区,但无济于事。

1 个答案:

答案 0 :(得分:-1)

我刚刚创建了一个简单的测试:

@Test
public void test(){
    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
    System.out.println(request);
}

使用我的Helios eclipse和依赖提供的依赖 - 一切都按预期工作,没有例外....你可能在eclipse中的类路径上有其他东西,或者问题可能来自不同的行。

您可以尝试使用(例如)

检查使用哪个jar
HttpServletRequest.class.getProtectionDomain().getCodeSource()

您还可以考虑使用httpunit而不是模拟请求。