2012-11-09 16 views
6

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

% In apps/utils/src/utils.erl 
-module(utils). 

-export([foo/0]). 

foo() -> "OH HAI". 

फिर

% In apps/some_app/src/some_app.erl 
-module(some_app). 

-export([bar/0]). 

bar() -> io:format("foo: ~s~n", [utils:foo()]). 

% unit tests for bar() 

फिर some_app:bar() के लिए इकाई परीक्षण असफल:

सेट अप कुछ इस तरह है। मैं उन्हें rebar eunit skip_deps=true के साथ चला रहा हूं। मैं skip_deps=true का उपयोग कर रहा हूं क्योंकि मेरी रिलीज कुछ तृतीय पक्ष अनुप्रयोगों (एसक्यूएल, आदि) का उपयोग करती है।

मुझे लगता है कि परीक्षण विफल होने लगते हैं क्योंकि ईयूनीट अपनी निर्भरताओं के बिना परीक्षण के तहत ऐप का आह्वान कर रहा है? क्या इसको ठीक करने का कोई तरीका है? मैंने स्पष्ट रूप से निर्भरता घोषित करने के लिए .app फ़ाइल को कॉन्फ़िगर किया है। यह रिलीज में ठीक काम करता है, और इसे बिना किसी समस्या के लगभग एक दिन के लिए तैनात किया गया है, लेकिन अगर मैं फिर से पास करने के लिए परीक्षण प्राप्त कर सकता हूं तो मुझे बहुत अच्छा लगेगा :)

(मैं एक मॉकिंग ऐप का उपयोग कर सकता हूं utils:foo/0 को बाहर निकालने के लिए, और मैं देख सकता हूं कि यह आदर्श आदर्श रूप से कहां होगा, लेकिन ऐसा लगता है कि इस मामले में ओवरकिल की तरह है क्योंकि utils:foo/0 (पढ़ें: यह वास्तविक दुनिया समकक्ष है) कुछ वास्तव में सरल सामान करता है।)

+0

मुझे लगता है कि इसका ईयूनीट के साथ कुछ लेना देना नहीं है, लेकिन रीबर परीक्षण कैसे चला रहा है। या तो क्योंकि जब आप skip_deps का उपयोग करते हैं, तो यह अन्य अनुप्रयोगों को संकलित नहीं करता है, या क्योंकि यह उन्हें एरलांग कोड पथ में नहीं जोड़ता है, भले ही उन्हें पहले संकलित किया गया हो। – RichardC

+0

मुझे लगता है कि मुझे इसे समझने के लिए रीबर स्रोत में खोदने की जरूरत है:/मुझे लगता है * 'skip_deps' ध्वज 'डीपीएस' निर्देशिका में यूनिट परीक्षणों को छोड़ देता है (जिसका उपयोग तीसरे पक्ष के सामान के लिए किया जा रहा है)। – dantswain

+0

जहां तक ​​मैं रीबर स्रोत को देखने से कह सकता हूं, 'skip_deps' बस' deps' निर्देशिका में अनुप्रयोगों को छोड़ने के लिए रीबर को बताता है। – dantswain

उत्तर

1

मैं इसे rebar compile eunit skip_deps=true करके काम करने में सक्षम था।

कुंजी में compile है और मुझे नहीं पता कि क्यों। मैं अनुमान लगा रहा हूं कि संकलन चरण स्मृति में सभी मॉड्यूल प्राप्त करता है। मुझे एक अच्छा स्पष्टीकरण सुनना अच्छा लगेगा।

0

मुझे लगता है कि आप कर सकते हैं आपके अनुप्रयोगों में से एक आपके द्वारा .app फ़ाइल के अनुप्रयोग भाग में शामिल करके उपयोगिता लोड करता है, जैसे:

{application,yourapp 
     [{description,"A description"}, 
      {vsn,"1.0.0"}, 
      {modules,[mod1, mod2, utils]}, 
      SNIP 

या किसी अन्य तरीके से इसे erlang नोड के पथ में जोड़ें ... शायद नोड शुरू करने पर -पा ध्वज का उपयोग कर।

+1

मॉड्यूल दूसरे एप्लिकेशन का हिस्सा है। इसे .app फ़ाइल के 'अनुप्रयोग' अनुभाग में निर्भरता के रूप में सूचीबद्ध किया गया है। 'मॉड्यूल' अनुभाग उस ऐप द्वारा पेश मॉड्यूल के लिए है, इसलिए उचित नहीं है। मैंने वैसे भी कोशिश की, हालांकि, और यह अभी भी काम नहीं किया। – dantswain