2012-06-06 14 views
5

मैं एक कस्टम 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) 

मैं Maven उपयोग कर रहा हूँ का निर्माण और अपने आवेदन का परीक्षण करने, टैग शामिल थे। मेरे टैग उप मॉड्यूल की वर्तमान निर्भरता हैं:

<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 में टैग का उपयोग करने के लिए पर्याप्त हैं। वे :-(

तो टैग का परीक्षण करने के लिए पर्याप्त नहीं हैं, क्या मैं गलत क्या किया?

Kindest का संबंध है,
प्र

उत्तर

1

जावा ईई Maven निर्भरता केवल प्रदान करता है स्टब्स मदद करने के लिए कोड संकलन जिसके लिए उन इंटरफेस की आवश्यकता होती है। आईटी डू स्नॉट कार्यान्वयन प्रदान करता है। इसलिए आप उन्हें नहीं चला सकते हैं। आपको या तो व्यवहार को नकल करने के लिए चारों ओर काम करने की ज़रूरत है (जो आपके कोड को बहुत से रिफैक्टरिंग कर सकता है), या आपको कार्यात्मक रूप से परीक्षण का उपयोग करके परीक्षण चलाने की आवश्यकता है निर्भरता जो एपीआई के पूर्ण कार्यान्वयन प्रदान करती है। शायद this answer मदद कर सकता है।

0

नील सही है। यदि आप पूर्ण javaee.jar का उपयोग नहीं करना चाहते हैं तो आपको ServletContext को नकल करने की आवश्यकता है।

0

आप मॉकिटो और पावर मॉक का उपयोग सर्वलेट संदर्भ और जेएसपी पृष्ठ संदर्भ के लिए कर सकते हैं। प्रत्येक टैग को मॉक करें जो आपके टैग को ठीक से काम करने के लिए कॉल करता है (doTag)। परीक्षण आवृत्तियों के रूप में आपको मॉकिंग फ्रेमवर्क और javax.el को जोड़ना होगा।

संबंधित मुद्दे