2012-06-06 3 views
5

나는 사용자 정의 JSP 태그를JSP 태그 단위 테스트하는 방법?

public class HappyTag extends TagSupport { ... } 

이 지금은 그것을 테스트해야합니다.

그래서 나는 간단한 JUnit 테스트 만들었습니다

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

을 나는 다음과 같은 오류 얻을 :

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
만이 스텁 코드를 컴파일 할 수 있도록 제공

자바 EE 받는다는 종속성 이 인터페이스를 필요로하는 경우 구현을 제공하므로 실행할 수 없습니다. 동작을 조롱하거나 (코드를 많이 리팩토링하게 될 수도 있음) 또는 코드를 리팩터링하여 기능적으로 테스트해야합니다. API의 전체 구현을 제공하는 종속성 this answer 일 수 있습니다.

0

닐이 맞습니다. 전체 javaee.jar을 사용하지 않으려면 ServletContext를 조롱해야합니다.

0

mockito 및/또는 power mock을 사용하여 서블릿 컨텍스트 및 JSP 페이지 컨텍스트를 모의 할 수 있습니다. 태그가 제대로 작동하도록 호출하는 각 메소드를 모의 해보기 (doTag). 조롱 프레임 워크와 javax.el을 테스트 종속성으로 추가해야합니다.

관련 문제