2

私は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を使用してコマンドラインから実行すると、そのようなエラーは発生しません

他の場所で同様の質問が投稿されているのを見て、API jar だけでなく実装 jar があることを確認しました。私のmaven依存関係は次のとおりです

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

私はこれにあまりにも多くの時間を費やし、クラスパスをいじり、ワークスペースを何度も掃除しましたが、役に立ちませんでした。

4

1 に答える 1

-1

簡単なテストを作成しました:

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

私のHelios eclipseとあなたが提供する依存関係を使用すると、すべてが期待どおりに機能し、例外はありません.... Eclipseのクラスパスに何か他のものがあるか、問題が別の行にある可能性があります。

(たとえば)を使用して、どのjarが使用されているかを確認してみてください

HttpServletRequest.class.getProtectionDomain().getCodeSource()

リクエストをモックする代わりに httpunit を使用することも検討できます。

于 2013-01-30T22:48:43.287 に答える