2011-10-14 13 views
7

मैं ईजेबी 3.1 के यूनिट परीक्षण पर एक छोटा सा शोध कर रहा हूं। अंत में मेरा लक्ष्य यूनिट परीक्षण ईजेबी 3.1 के लिए उपयोग में आसान समाधान का उत्पादन करना है।यूनिट परीक्षण ईजेबी 3.1

  1. मैं बड़ा EJB कार्यान्वयन के साथ ज्यादा जानकारी नहीं है और इसलिए मैं पहली बार कुछ अनुभवी हाथों प्राप्त करना चाहते हैं (आप) क्या यूनिट टेस्टिंग EJBs में मुश्किल है पर अपने विचारों में पूल करने के लिए।
  2. प्रारंभिक शोध के साथ मैंने पहले से ही किया है, मैं एम्बेडेड कंटेनर का उपयोग करने के बजाय यूनिट परीक्षण के लिए मॉकिंग फ्रेमवर्क का उपयोग करने के फायदों को समझ सकता हूं। यद्यपि दोनों अच्छे हैं, हालांकि यूनिट परीक्षण की बात आती है तो नकली ढांचे का आकार थोड़ा ऊपर है। एम्बेडेड कंटेनर बहुत अच्छे हैं और उनके अपने फायदे हैं, लेकिन यूनिट परीक्षण का एक अलग चरण हो सकता है। मुझे अभी भी विश्वास है कि कम से कम कुछ परिदृश्यों में ऐसे ढांचे का उपयोग करने में कुछ कमीएं होनी चाहिए जिन्हें बेहतर किया जा सकता है।

मुझे उम्मीद है कि मैं यूनिट परीक्षण ईजेबी के लिए एक पूर्ण समाधान कर सकता हूं जिसे मैं एक बार इस मंच में साझा कर सकता हूं।

आपके समर्थन के लिए धन्यवाद।

उत्तर

14

मेरी सलाह है कि मैं आपको देख सकने वाले सामान्य जाल में नहीं आना चाहूंगा, जो आपको लगता है कि आपको नक़्क़ाशीदार ईजेबी कंटेनर का उपयोग करने और उपयोग करने के बीच चयन करने की आवश्यकता है।

आप दोनों का उपयोग कर सकते हैं, आपको दोनों का उपयोग करना चाहिए, और जहां आपको दोनों का उपयोग करना मुश्किल लगता है, आपको अपने ईजेबी कंटेनर से बेहतर समर्थन और अधिक सुविधाएं मांगनी चाहिए।

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

स्टैंडर्ड EJBContainer एपीआई

package org.superbiz.stateless.basic; 

import junit.framework.TestCase; 

import javax.ejb.embeddable.EJBContainer; 

public class CalculatorTest extends TestCase { 

    private CalculatorBean calculator; 

    /** 
    * Bootstrap the Embedded EJB Container 
    * 
    * @throws Exception 
    */ 
    protected void setUp() throws Exception { 

     EJBContainer ejbContainer = EJBContainer.createEJBContainer(); 

     Object object = ejbContainer.getContext().lookup("java:global/simple-stateless/CalculatorBean"); 

     assertTrue(object instanceof CalculatorBean); 

     calculator = (CalculatorBean) object; 
    } 

पूर्ण स्रोत here

यह classpath और भार सभी सेम स्कैन करता है।

कोई स्कैनिंग, आसान मजाक दृष्टिकोण

थोड़ा अलग दृष्टिकोण जहां कोड में सब कुछ परिभाषित करते हैं। स्पष्ट रूप से मजाक करना आसान है क्योंकि आप इच्छानुसार आवश्यक बीन्स के नकली कार्यान्वयन की आपूर्ति कर सकते हैं।

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

    @EJB 
    private Movies movies; 

    @Resource 
    private UserTransaction userTransaction; 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Module 
    public PersistenceUnit persistence() { 
     PersistenceUnit unit = new PersistenceUnit("movie-unit"); 
     unit.setJtaDataSource("movieDatabase"); 
     unit.setNonJtaDataSource("movieDatabaseUnmanaged"); 
     unit.getClazz().add(Movie.class.getName()); 
     unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)"); 
     return unit; 
    } 

    @Module 
    public EjbJar beans() { 
     EjbJar ejbJar = new EjbJar("movie-beans"); 
     ejbJar.addEnterpriseBean(new StatefulBean(MoviesImpl.class)); 
     return ejbJar; 
    } 

    @Configuration 
    public Properties config() throws Exception { 
     Properties p = new Properties(); 
     p.put("movieDatabase", "new://Resource?type=DataSource"); 
     p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); 
     p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); 
     return p; 
    } 

    @Test 
    public void test() throws Exception { 

     userTransaction.begin(); 

     try { 
      entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); 
      entityManager.persist(new Movie("Joel Coen", "Fargo", 1996)); 
      entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998)); 

      List<Movie> list = movies.getMovies(); 
      assertEquals("List.size()", 3, list.size()); 

      for (Movie movie : list) { 
       movies.deleteMovie(movie); 
      } 

      assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); 

     } finally { 
      userTransaction.commit(); 
     } 
    } 
} 

Full source here

अंतिम परिणाम

यह आदि परीक्षण के विभिन्न प्रकार, के बीच मतभेद पर ध्यान केंद्रित करने की इच्छा होती है लेकिन निश्चित रूप से कुछ एक व्यावहारिक बीच के लिए कहा जा करने के लिए नहीं है। मैं व्यक्तिगत रूप से जितना संभव हो सके "इकाई" और "एकीकरण" शैलियों को मिश्रण करने में सक्षम होने के साथ कुछ भी गलत नहीं देखता।

निश्चित रूप से, यह एक सराहनीय लक्ष्य है। विचारों और फीचर अनुरोधों को हमें करीब लाने के लिए बहुत स्वागत है।

+0

हैलो डेविड, धन्यवाद आपके उत्तर के लिए एक बहुत। मैं दोनों दृष्टिकोणों को मिश्रित करने के बारे में सोच रहा था जो दोनों दृष्टिकोणों के लाभों को फसल में मदद करेंगे। – Bala

5

वहाँ वास्तव में दो परीक्षण आप पर विचार करना (अनन्य नहीं) चाहते हो सकता है के विभिन्न प्रकार हैं:

  • यूनिट टेस्टिंग: आपका EJBs दिन के अंत में POJOs होते हैं और इसलिए आप अपने पसंदीदा का उपयोग कर सकते यूनिट परीक्षण ढांचे (जैसे जुनीट) और मॉकिटो या इज़ीमोक जैसे मॉकिंग फ्रेमवर्क भी।
  • एकीकरण परीक्षण: यहां आप ईजेबी का परीक्षण करना चाहते हैं जैसे कि वे कंटेनर में थे (अलगाव में नहीं) और इसलिए आपको किसी भी तरह कंटेनर का अनुकरण करना होगा। आप अभी भी अपने परीक्षण कोड (उदाहरण के लिए जुनीट) को कोड करने के लिए अपने यूनिट परीक्षण ढांचे का उपयोग कर सकते हैं, लेकिन अब आप परीक्षण कर रहे हैं कि इन ईजेबी कंटेनर में कैसे व्यवहार करते हैं और अन्य सहयोगियों (जैसे अन्य ईजेबी) के साथ बातचीत करते हैं। इसके लिए मैं Arquillian
+0

आपके इनपुट के लिए धन्यवाद। मैं मूल रूप से डेवलपर के लिए सुरुचिपूर्ण और आसान बनाने के लिए सुविधाओं के साथ यूनिट परीक्षण को सरल बनाने पर केंद्रित हूं। लेकिन, जैसा कि आपने भी उल्लेख किया है, यूटी के 2 चरणों के रूप में एम्बेडेड कंटेनरों का उपयोग करके यूटी और एकीकरण परीक्षण दोनों का एक बेहतर दृष्टिकोण एक अच्छा दृष्टिकोण होगा। – Bala

3

आप जावा ईई घटकों के यूनिट परीक्षणों के लिए सुई का उपयोग कर सकते हैं।

सुई अलगाव में कंटेनर के बाहर जावा ईई घटकों का परीक्षण करने के लिए एक हल्का ढांचा है। यह निर्भरता और नकली वस्तुओं के स्वचालित इंजेक्शन का विश्लेषण करके परीक्षण सेटअप कोड को कम कर देता है।

http://needle.spree.de

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