प्रश्न थोड़ा अस्पष्ट है ("एरलांग समवर्ती है, इसे एरलांग के साथ परीक्षण करें!") लेकिन मैं थोड़ी विस्तार करने की कोशिश करूंगा।
परीक्षण एरलांग कोड जटिल परीक्षण harnesses स्थापित करने के लिए सरल रूप से सरल (सही इनपुट सही उत्पादन उत्पन्न करता है) से हो सकता है जो सत्यापित करता है कि आपका घटक जिस तरह से व्यवहार करता है उसे सत्यापित करता है। आपकी दी गई स्थिति के लिए सबसे अच्छा क्या है आपके पास पूरी तरह से आवश्यक आवश्यकताओं और काले बॉक्स/श्वेत बॉक्स परीक्षण की मात्रा पर निर्भर करता है जो आप करना चाहते हैं।
एरलांग की सुंदरता का हिस्सा समरूपता पारदर्शी बनाने की क्षमता है।
deep_sum(ListOfLists) ->
Parent = self(),
[spawn(fun() -> Parent ! lists:sum(List) end) || List <- ListOfLists],
lists:sum([receive Sum -> Sum end || _ <- ListOfLists]).
आप आमतौर पर एक बहुत ही सरल EUnit परीक्षण मामले के साथ इस परीक्षण होगा::
deep_sum_test() ->
?assertEqual(0, deep_sum([0, 0, 0, 0])),
?assertEqual(40, deep_sum([10, 10, 10, 10]).
अब, चलो हम मान लें कि उदाहरण का पालन करना (एक समारोह है कि सूचियों की एक सूची के संकलन parallelizes) पर विचार करें
deep_sum(Pool, ListOfLists) ->
distribute_lists(Pool, ListOfLists),
lists:sum([receive Sum -> Sum end || _ <- ListOfLists]).
distribute_lists(Pool, ListOfLists) -> distribute_lists(Pool, Pool, ListOfLists).
distribute_lists([P|Pool], All, [L|ListOfLists]) ->
P ! {self(), L},
distribute_lists(Pool, All, ListOfLists);
distribute_lists([], All, ListOfLists) ->
distribute_lists(All, All, ListOfLists);
distribute_lists(_Pool, _All, []) ->
ok.
जब यह परीक्षण करते हैं, हम इस प्रक्रिया पूल faking से निपटने के लिए:
01 तर्क के रूप में एक प्रक्रिया पूल: इस कार्यक्षमता को थोड़ा और स्पष्ट एपीआई है
deep_sum_test() ->
Pool = [spawn_link(fun() -> fake_pool(1) end) || _ <- lists:seq(1, 3)],
?assertEqual(4, deep_sum(Pool, [lists:seq(1, 3) || _ <- list:seq(1, 4)]),
?assertEqual(7, deep_sum(Pool, [lists:seq(1, 3) || _ <- list:seq(1, 7)]),
[P ! stop || P <- Pool].
fake_pool(CannedResponse) ->
receive
{From, _L} -> From ! CannedResponse;
stop -> ok
end,
fake_pool(CannedResponse).
जैसा कि आप देख सकते हैं, एरलांग में समवर्ती कार्यक्रमों का परीक्षण विभिन्न आकार ले सकते हैं। ये बेहद सरल उदाहरण हैं, लेकिन एर्लांग के समेकन प्राइमेटिव्स में निर्मित के साथ, सही स्तर पर सारणी बनाने के लिए आप जिस प्रकार की टेस्ट हार्नेस चाहते हैं, उसे बनाना बहुत आसान है।
मुझे आम तौर पर टीडीडी को ऑर्थोगोनल होने के लिए लगता है कि आप समवर्ती कोड का परीक्षण कर रहे हैं या नहीं, इसलिए कहा जाता है कि परीक्षण तकनीकों का उपयोग सामान्य इकाई परीक्षण के लिए भी किया जा सकता है।
यह सलाह जावा जैसी भाषा के लिए साझा राज्य समरूपता के साथ सच है। हालांकि एरलांग संदेश पासिंग का उपयोग करता है, और जब आप अन्य प्रक्रियाओं पर डेटा भेजते हैं, और किस क्रम में प्राप्त किया जाता है, तो आप पर नियंत्रण होता है। असल में अधिक नियंत्रण। ऐसा लगता है कि इसके लिए कोड/परीक्षण पैटर्न होना चाहिए। – madlep
सच है, साझा राज्य की कमी आपको डेटा भ्रष्टाचार या असंगतता समस्याओं से बचाती है। लेकिन आपको अभी भी सिंक्रनाइज़ेशन के बारे में चिंता करने की ज़रूरत है। क्या मैं सही हूँ? –