2015-12-07 15 views
6

सबसे पहले मैं अपने आवेदन के लिए स्कैला और एसबीटी का उपयोग कर रहा हूं।मैं यूनिट परीक्षण/नकली कैसे कर सकता हूं लोचदार खोज

मैं अपने ES इंस्टेंस से कनेक्ट करने के लिए elastic4s लाइब्रेरी के ElasticClient का उपयोग कर रहा हूं। तो मूल रूप से मुझे बस अपने यूनिट परीक्षणों में इन परीक्षण करने में सक्षम होना चाहिए। जैसे कि यह सत्यापित करना कि मेरा डेटा वास्तव में इसे ईएस और उस तरह की चीजों में बना देता है।

लोचदार खोज का मज़ाक उड़ाए जाने का सबसे अच्छा तरीका है या ऐसा करने का एक और अधिक प्रभावी तरीका है? और मैं उनमें से किसी के बारे में कैसे जाऊं?

मुझे पता चला है कि आप स्थानीय क्लाइंट को ElasticClient.local के साथ स्थापित कर सकते हैं लेकिन मुझे कई उदाहरण नहीं मिल रहे हैं। हम इस कार्यान्वयन के साथ जाना चाहते हैं, इसलिए यदि आप जानते हैं कि इसका उपयोग कैसे किया जाए तो मैं इसके बारे में सुनना चाहता हूं लेकिन अगर इसे पूरा करने के लिए बेहतर या आसान तरीके हैं जो काम करेंगे।

+1

मुझे शुद्धतावादी होने दो, लेकिन * सत्यापित करते हुए अपने डेटा वास्तव में ES * में इसे बनाया है नहीं एक इकाई परीक्षण, यह * एकीकरण * परीक्षण क्योंकि आप जाँच कर रहे हैं कि कैसे अच्छी तरह से एक घटक (अपने कोड) एक और के साथ खेलता है (ईएस) –

उत्तर

2
elastic search is java के बाद से

और अपने कोड भी (या संगत) सबसे अच्छा तरीका बूट करने के लिए लोचदार खोज "एम्बेड करने योग्य" का उपाय खोजा होगा - बस अपने @Before विधि में अपने सर्वर को शुरू करने तथा @After में/उसे बंद स्पष्ट यह ।

आप के लिए सौभाग्य से, ऐसा लगता है जैसे किसी को पहले से ही ठीक उसी विचार था - https://orrsella.com/2014/10/28/embedded-elasticsearch-server-for-scala-integration-tests/

+1

यह लिंक एकीकरण परीक्षण को इंगित करता है। क्या यूनिट परीक्षणों के लिए कोई संदर्भ है? धन्यवाद – Bob

+0

@Bob मुझे यकीन है कि अगर आप एम्बेडेड डेटाबेस की जरूरत है कि परीक्षण अभी भी इकाई है नहीं कर रहा हूँ। – mulya

1

हमारे ElasticSearch परीक्षण के लिए हम हमेशा-चालू कि प्रत्येक परीक्षा का उपयोग करता है हमारे सर्वर जेनकींस निर्माण पर ElasticSearch के कहने का उपयोग करें। स्थानीय परीक्षणों के लिए, आपको अपने स्थानीय लोचदार खोज को आग लगाना होगा। हम बाकी इंटरफेस का उपयोग करते हैं, जावा एपीआई नहीं।

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

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

1

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

यह एक एकल नोड लोचदार खोज क्लस्टर बनाता है। यह नोड पूर्ण elasticsearch एपीआई का समर्थन करता है।

/** 
* A simple embeddable Elasticsearch server. This is great for integration testing and also 
* stand alone tests. 
* 
* Starts up a single ElasticSearch node and client. 
*/ 
public class EmbeddedElasticsearchServer 
{ 
    public EmbeddedElasticsearchServer(String storagePath) { 

    storagePath_ = storagePath; 
    ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder() 
     .put("http.enabled", "false") 
     .put("path.data", storagePath_); 

    node_ = new NodeBuilder() 
     .local(true) 
     .settings(elasticsearchSettings.build()) 
     .node(); 

    client_ = node_.client(); 
    } 



    public Client getClient() { 
    return client_; 
    } 


    public void shutdown() 
    { 
    node_.close(); 
    } 

    public void deleteStorage() throws IOException 
    { 
    File storage = new File(storagePath_); 

    if(storage.exists()) 
    { 
     FileUtils.deleteDirectory(storage); 
    } 

    } 

    private Client client_; 
    private Node node_; 
    private String storagePath_; 
} 

इसका इस्तेमाल के लिए, बस getClient फोन और फिर आप Elasticsearch जावा एपीआई ठीक उपयोग कर सकते हैं।

+2

वास्तव में ये एकीकरण परीक्षण हैं। – Jon

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