2012-06-06 25 views
5

私は、カスタムJSPタグにJSPタグの単体テスト方法は?

public class HappyTag extends TagSupport { ... } 

を持っているし、今私はそれをテストする必要があります。

だから私は、単純なJUnitテスト作成しました:

@Test 
public void testTag() { 
    HappyTag tag = new HappyTag(); 
} 

を、私は次のエラーを取得:私は自分のアプリケーションを構築し、テストするためにMavenを使用しています

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/jsp/tagext/TagSupport 
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.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

を、タグが含まれています。 タグサブモジュールの私の現在の依存関係は次のとおりです。

<dependencies> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 

</dependencies> 

プラス親モジュールからのいくつかの依存関係:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 


    <dependency> 
     <groupId>javax.portlet</groupId> 
     <artifactId>portlet-api</artifactId> 
     <version>2.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.portletfaces</groupId> 
     <artifactId>portletfaces-bridge-impl</artifactId> 
     <version>2.0.0</version> 
    </dependency> 


    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>el-api</artifactId> 
     <version>2.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>el-impl</artifactId> 
     <version>2.2</version> 
     <scope>provided</scope> 
    </dependency> 

これらの依存関係は、私のJSPのタグをコンパイルして使用するのに十分です。彼らは私が間違って何をした、だから、

:-(タグをテストするのに十分ではないですか。

親切よろしく、
Q.

答えて

1

のJava EEのMavenの依存関係はコードのみをコンパイル助けるためにスタブを提供しますこれらのインターフェースを必要とします。これは実装を提供するもので、実行することはできません。(コードを多くリファクタリングする可能性があります)動作を模擬するか、関数を使用してテストを機能的に実行する必要があります。 APIの完全な実装を提供する依存関係 this answerかもしれません。

0

ニールです。完全なjavaee.jarを使いたくない場合は、ServletContextをモックする必要があります。

0

サーキットコンテキストとJSPページコンテキストをモックするためにmockitoやpower mockを使用できます。あなたのタグが適切に機能するために呼び出す各メソッドをモックする(doTag)。テストの依存関係として、mockingフレームワークとjavax.elを追加する必要があります。

関連する問題