2009-02-13 14 views
5

मैं वर्तमान में यूनिट परीक्षणों के लिए एक एम्बेडेड एलडीएपी सर्वर का उपयोग करने की कोशिश कर रहा हूं।इकाई परीक्षणों में वसंत एम्बेडेड एलडीएपी सर्वर

वसंत सुरक्षा में, आप निर्दिष्ट एलडीआईफ़ से लोड किए गए कुछ नमूना डेटा के साथ टैग के साथ परीक्षण के लिए एक एम्बेडेड एलडीएपी सर्वर को जल्दी से परिभाषित कर सकते हैं।

मैं एलडीएपी संचालन करने के लिए स्प्रिंग एलडीएपी का उपयोग कर रहा हूं, और मेरी उपयोगकर्ता सेवा ऑब्जेक्ट की सामान्य सीआरयूडी सुविधाओं का परीक्षण करने की सोच रहा हूं।

क्या यह सुनिश्चित करने का एक तरीका है कि एम्बेडेड सर्वर में प्रविष्टियां एक ही संगत स्थिति में हों (जैसे सभी को हटाएं और ldif प्रविष्टियों को पुनः लोड करें) प्रत्येक परीक्षण के लिए मैं चल रहा हूं?

मैं निम्नलिखित के बारे में सोचा: 1) इंगित करें कि विधि संदर्भ dirties, और के रूप में यह हर विधि 2 के लिए सर्वर को पुनः आरंभ करने के लिए होता एम्बेडेड LDAP सर्वर है, जो दर्दनाक लगता है की एक मनोरंजन के लिए मजबूर) बनाएं एक परीक्षण संगठन में परीक्षण प्रविष्टियां, जैसे कि मैं उन्हें अनबिंड कर सकता हूं और फिर वहां ldif फ़ाइल में बस लोड कर सकता हूं।

मुझे 2 पसंद है, लेकिन ऐसा लगता है कि स्प्रिंग एलडीएपी के पास एलडीआईफ़ फ़ाइल की सामग्री को लोड करने और भेजने के लिए कोई अच्छा सहायक नहीं है।

वसंत के एम्बेडेड एलडीएपी सर्वर के साथ एलडीएपी परीक्षण करने के बारे में कोई सुझाव, या दो संभावित समाधानों का उल्लेख मैं करता हूं?

धन्यवाद

उत्तर

3

LDAP नहीं होता LDAP संचालन के आसपास व्यवहार नियंत्रण प्रदान करते हैं? यदि हां, तो क्यों अपनी ऑटो-रोलबैक क्षमता के साथ स्प्रिंग टेस्ट फ्रेमवर्क का उपयोग न करें?

मैं एक जेडीबीसी-एलडीएपी ब्रिज ड्राइवर के बारे में भी जानता हूं जो एलडीएपी भंडार को लपेटता है, जो इसे एक रिलेशनल डेटाबेस के रूप में पेश करता है। मैंने इस से कनेक्ट करने के लिए iBatis का उपयोग किया है (मैंने इसे http://lokibear.blogspot.com पर लिखा है, जुलाई से लेख देखें)। मैंने अभी तक लेनदेन नियंत्रण लागू करने की कोशिश नहीं की है, लेकिन चालक के लिए वेबसाइट लेनदेन को अनदेखा करने की क्षमता का उल्लेख करती है (जिसका अर्थ है कि आप उन्हें अनदेखा कर सकते हैं ... सही?)।

जैसा कि मैंने कहा, मैंने अभी तक यह कोशिश नहीं की है; लेकिन, यदि यह एलडीएपी के आसपास लेनदेन प्रदान करता है, तो आप फिर से ऑटो-रोलबैक प्राप्त करने के लिए स्प्रिंग टेस्ट फ्रेमवर्क का उपयोग कर सकते हैं। मैंने उस ढांचे के चारों ओर एक त्वरित चीटशीट डाली है - मेरे ब्लॉग पर सितंबर पोस्ट देखें।

क्षमा करें, मैं आपका लक्ष्य यहां खो सकता हूं; लेकिन शायद ये सुझाव उपयोगी हैं। सौभाग्य!

4

मैं यहां ऑफ-ट्रैक हो सकता हूं, लेकिन यदि आप एलडीएपी एकीकरण का परीक्षण नहीं कर रहे हैं, तो आप एक मॉक ऑब्जेक्ट के साथ एलडीएपी कनेक्शन को नकल कर सकते हैं जो हमेशा आपके द्वारा अपेक्षित मूल्यों को वापस कर देता है ताकि आपका अन्य यूनिट टेस्ट पूरा हो सके ।

यदि आप एलडीएपी कनेक्शन का परीक्षण कर रहे हैं तो आप वास्तव में एकीकरण परीक्षण कर रहे हैं। इस मामले में वास्तविक एलडीएपी कार्यान्वयन से कनेक्ट करना शायद सबसे अच्छा है।

2

आप जानते हैं कि एम्बेडेड एलडीएपी कार्यक्षमता स्प्रिंग एलडीएपी द्वारा प्रदान नहीं की जाती है, लेकिन Apache Directory Server। दुर्भाग्यवश, अपाचे डीएस (जैसा कि वसंत द्वारा तारित किया गया है) में एलडीआईएफ लोडर बहुत खराब त्रुटि प्रबंधन और रिपोर्टिंग क्षमता है, और संभवतः ऐसा व्यवहार करने वाला नहीं है क्योंकि आप वास्तव में यूनिट परीक्षण के लिए चाहते हैं। यदि आप वास्तव में एक स्वच्छ स्लेट से शुरू करना चाहते हैं तो आपकी सबसे अच्छी शर्त स्प्रिंग सिक्योरिटी एलडीएपी यूनिट परीक्षणों का नेतृत्व करना है और स्वच्छ एलडीआईएफ फ़ाइल लोड के साथ हर बार अपाचे डीएस को फिर से शुरू करना है।

वैकल्पिक रूप से, आप एलडीआईफ़ को पूरी तरह से छोड़ सकते हैं और अपना यूनिट टेस्ट रैपर बना सकते हैं जो आपके यूनिट परीक्षणों से पहले डेटा की पूर्व और बाद की स्थितियों को सत्यापित करता है। यह अधिक काम होगा, लेकिन आखिरकार आपके लिए बेहतर काम कर सकता है। मेरे लिए

1

वर्क्स ठीक:

@Inject 
private ApplicationContext applicationContext; 

@Before 
public void reloadLdapDirectory() throws NamingException, IOException{ 
    ApacheDSContainer apacheDSContainer = (ApacheDSContainer) applicationContext.getBean(BeanIds.EMBEDDED_APACHE_DS); 
    LdapTestUtils.clearSubContexts(contextSource, DistinguishedName.EMPTY_PATH); 

    ClassPathResource classPathResource = new ClassPathResource("ldap.ldif"); 

    File tempFile = File.createTempFile("spring_ldap_test", ".ldif"); 
    try { 
     InputStream inputStream = classPathResource.getInputStream(); 
     IOUtils.copy(inputStream, new FileOutputStream(tempFile)); 
     LdifFileLoader fileLoader = new LdifFileLoader(apacheDSContainer.getService().getAdminSession(), tempFile.getAbsolutePath()); 
     fileLoader.execute(); 
    } 
    finally { 
     try { 
      tempFile.delete(); 
     } 
     catch (Exception e) { 
      // Ignore this 
     } 
    } 
} 

मैं ऐसी ही कुछ पूछा और ल्यूक टेलर से एक जवाब मिला: Integration tests with spring-security and ldap