2012-01-03 18 views
5

मैं प्रोसेसरबीन का परीक्षण कैसे कर सकता हूं? चूंकि मैं केवल प्रोसेसरबीन का परीक्षण नहीं करना चाहता था, दाओ नहीं, मुझे दाओ को दबाकर या नकल करने की ज़रूरत है, लेकिन मुझे नहीं पता कि मैं जूनिट के साथ ऐसा कैसे कर सकता हूं।यूनिट-परीक्षण एक ईजेबी 3.0 जिसमें एक और ईजेबी इंजेक्शन

मैं Junit4 और Ejb3.0

@Stateless 
public class ProcessorBean { 

    @EJB 
    private Dao dao; 

    public void process() { 
     //logic to be tested 
    } 
} 

उत्तर

3

पर Series of Effective Mockito articles आप मजाक के साथ संयोजन में उपयोगी लग सकते OpenEJB में कुछ समर्थन नहीं है।

ईजेबी 3.0 एंबेडेड ईजेबीसीओन्टैनर एपीआई के विकल्प के रूप में, आप बस कोड में अपना ऐप बना सकते हैं।

import junit.framework.TestCase; 
import org.apache.openejb.jee.EjbJar; 
import org.apache.openejb.jee.StatelessBean; 
import org.apache.openejb.junit.ApplicationComposer; 
import org.apache.openejb.junit.Module; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import javax.ejb.EJB; 

@RunWith(ApplicationComposer.class) 
public class ProcessorBeanTest extends TestCase { 

    @EJB 
    private ProcessorBean processorBean; 

    @Module 
    public EjbJar beans() { 
     EjbJar ejbJar = new EjbJar(); 
     ejbJar.addEnterpriseBean(new StatelessBean(ProcessorBean.class)); 
     ejbJar.addEnterpriseBean(new StatelessBean(MockDao.class)); 
     return ejbJar; 
    } 

    @Test 
    public void test() throws Exception { 

     // use your processorBean 

    } 
} 

यहां हम ApplicationComposer द्वारा संचालित एक टेस्टकेस देखते हैं। यह एक जुनीट टेस्ट रनर के लिए एक साधारण रैपर है जो @Module विधियों की तलाश करता है जिसका उपयोग आपके ऐप को परिभाषित करने के लिए किया जा सकता है।

यह वास्तव में ओपनईजेबी ने वर्षों के लिए अपने सभी आंतरिक परीक्षण किए हैं और हमने पिछले कुछ रिलीज (3.1.3 के बाद से) में खोलने का फैसला किया है। यह शक्तिशाली और बेहद तेज़ से परे है क्योंकि यह क्लासपाथ स्कैनिंग और तैनाती के कुछ भारी हिस्सों में कटौती करता है।

Maven निर्भरता तो ऐसा दिखाई देगा:

<dependencies> 
    <dependency> 
     <groupId>org.apache.openejb</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0-3-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- 
    The <scope>test</scope> guarantees that none of your runtime 
    code is dependent on any OpenEJB classes. 
    --> 
    <dependency> 
     <groupId>org.apache.openejb</groupId> 
     <artifactId>openejb-core</artifactId> 
     <version>4.0.0-beta-1</version> 
     <scope>test</scope> 
    </dependency> 

    </dependencies> 
+0

बहुत दिलचस्प सुविधा। * ओपन ईजेबी के बारे में * नहीं पता था - साझा करने के लिए धन्यवाद! –

+0

@ डेविड बिल्विन इस मामले में, मॉकडाओ.क्लास एक डेवलपर है जो डीएओ के अधिकार को नकली लागू करता है? – Bala

+0

@ बाला बिल्कुल। तो सैद्धांतिक रूप से मॉकडाओ एक दृढ़ता विफलता या कुछ को फिक्र करने का अपवाद फेंक सकता है, या एक विशिष्ट इकाई, आदि को वापस करने के लिए कड़ी मेहनत कर सकता है। स्टेटिक इनर क्लास ठीक काम करते हैं, इसलिए मॉकडाओ को टेस्ट केस में सही तरीके से परिभाषित किया जा सकता है। ओपनईजेबी में अधिकांश यूनिट परीक्षणों में स्थैतिक आंतरिक वर्ग "परीक्षण" सेम का समूह होता है। परीक्षण सेम (उर्फ नकली सेम), छोटे होते हैं और उन्हें एक साथ रखना अच्छा होता है। –

1

उपयोग कर रहा हूँ आप किसी भी वस्तु नकली या उसके ठूंठ बनाना चाहते हैं, तो आप अतिरिक्त पुस्तकालय का उपयोग कर सकते हैं, उदाहरण के Mockito। यह आपको किसी वर्ग या यहां तक ​​कि एक इंटरफ़ेस को आसानी से नकल करने की अनुमति देता है।

अतिरिक्त पठन:

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