উত্তর:
দুটোই মূল্যবান। আমি ইউনিটেস্টের স্থান গ্রহণ করে ডকটেস্ট এবং নাক উভয়ই ব্যবহার করি । পরীক্ষাগুলি এমন ব্যবহারের উদাহরণ দিচ্ছে যা ডকুমেন্টেশন হিসাবে প্রকৃতপক্ষে কার্যকর for সাধারণত আমি এই পরীক্ষাগুলিকে বিস্তৃত করি না, কেবলমাত্র তথ্যবহুলদের উদ্দেশ্যে। আমি কার্যকরভাবে বিপরীতে ডক্টেস্ট ব্যবহার করছি: আমার কোডটি আমার ডক্টেস্টের ভিত্তিতে সঠিক কিনা তা পরীক্ষা করতে নয়, তবে কোডের ভিত্তিতে আমার ডকুমেন্টেশন সঠিক কিনা তা পরীক্ষা করতে।
কারণটি হ'ল আমি জানতে পারি যে বিস্তৃত নথিগুলি আপনার ডকুমেন্টেশনগুলিকে অনেক বেশি বিশৃঙ্খলা করবে, সুতরাং আপনি হয় অকেজো ডকাস্ট্রিং বা অসম্পূর্ণ পরীক্ষা দিয়ে শেষ করবেন।
কোডটি পরীক্ষার জন্য , লক্ষ্যটি হ'ল প্রতিটি ক্ষেত্রে ভালভাবে পরীক্ষা করা, উদাহরণস্বরূপ কী হয় তা ব্যাখ্যা করার চেয়ে, যা একটি ভিন্ন লক্ষ্য যা আমি মনে করি যে অন্যান্য ফ্রেমওয়ার্কগুলি আরও ভালভাবে পূরণ করতে পারে।
আমি ইউনিটেস্ট প্রায় একচেটিয়াভাবে ব্যবহার করি।
কিছুক্ষণের মধ্যে, আমি একটি ডক্ট্রাস্টিংয়ে এমন কিছু জিনিস রাখব যা ডক্টেস্টের দ্বারা ব্যবহারযোগ্য।
95% পরীক্ষার ক্ষেত্রে ইউনিটেস্ট হয়।
কেন? আমি ডকাস্ট্রিংগুলি কিছুটা খাটো এবং আরও অনেক কিছুতে রাখতে চাই। কখনও কখনও পরীক্ষার কেসগুলি একটি ডকাস্ট্রিং পরিষ্কার করতে সহায়তা করে। বেশিরভাগ সময়, ডকাস্ট্রিংয়ের জন্য আবেদনের পরীক্ষার কেসগুলি দীর্ঘ।
docstring
এবং কি না উপযুক্ত দেখতে শীতল হবে । আমি প্রকৃতপক্ষে টার্মের ডক্ট্রিং পছন্দ করি যে এটি কোনও ইন্টারফেস কীভাবে ব্যবহার করতে হয় তা স্পষ্টভাবে দেখাচ্ছে, তবে এটি এবং ইউনিট পরীক্ষার জন্য এটি উভয়ই সঠিকভাবে মানায় না।
ডক্টেস্টিংয়ের আরেকটি সুবিধা হ'ল আপনি নিশ্চিত করতে পারেন যে আপনার কোডটি আপনার ডকুমেন্টেশন যা বলে তাই করে। কিছুক্ষণ পরে, সফ্টওয়্যার পরিবর্তনগুলি আপনার ডকুমেন্টেশন এবং কোডকে বিভিন্ন জিনিস করতে পারে। :-)
আমি বায়োইনফর্মেশিয়ান হিসাবে কাজ করি এবং আমি যে কোডটি লিখি তার বেশিরভাগটি হ'ল "এক সময়, একটি টাস্ক" স্ক্রিপ্ট, কোড যা কেবল একবার বা দু'বার চালিত হবে এবং এটি একটি নির্দিষ্ট নির্দিষ্ট কার্য সম্পাদন করে।
এই পরিস্থিতিতে, বড় ইউনিটসেটগুলি লিখতে ওভারকিল হতে পারে এবং ডক্টেসট একটি দরকারী আপস। এগুলি লেখার পক্ষে দ্রুত এবং এগুলি যেহেতু সাধারণত কোডটিতে অন্তর্ভুক্ত থাকে তাই অন্য ফাইল খোলা না রেখে কোডটি কীভাবে আচরণ করা উচিত সে সম্পর্কে তারা সর্বদা নজর রাখার অনুমতি দেয়। ছোট স্ক্রিপ্ট লেখার সময় এটি দরকারী।
এছাড়াও, ডকুমেন্টগুলি কার্যকর যখন আপনি কোনও স্ক্রিপ্ট কোনও গবেষকের কাছে দিতে হয় যা প্রোগ্রামিংয়ে দক্ষ নয়। কিছু লোককে ইউনিটেটগুলি কীভাবে কাঠামোগত করা হয় তা বোঝা খুব কঠিন মনে হয়; অন্যদিকে ডক্টেটগুলি ব্যবহারের সহজ উদাহরণ, যাতে লোকেরা কীভাবে এটি ব্যবহার করতে হয় সেগুলি দেখার জন্য সেগুলি কেবল অনুলিপি করে আটকান।
সুতরাং, আমার উত্তরটি পুনরায় শুরু করতে: ডেক্সটেটগুলি তখন কার্যকর হয় যখন আপনাকে ছোট স্ক্রিপ্টগুলি লিখতে হয় এবং যখন আপনাকে সেগুলি পাস করতে হয় বা গবেষকদের কাছে দেখাতে হয় যা কম্পিউটার বিজ্ঞানী নয়।
আপনি যদি কেবল ইউনিট টেস্টিংয়ের ধারণাটি দিয়ে শুরু করছেন, তবে আমি এটি শুরু করব doctest
কারণ এটি ব্যবহার করা সহজ। এটি স্বাভাবিকভাবেই কিছু স্তরের ডকুমেন্টেশন সরবরাহ করে। এবং এর সাথে আরও বিস্তৃত পরীক্ষার জন্য doctest
, আপনি কোনও বাহ্যিক ফাইলে পরীক্ষা করতে পারেন যাতে এটি আপনার ডকুমেন্টেশনগুলিকে বিশৃঙ্খলা না করে।
আমি আপনাকে পরামর্শ দিচ্ছি unittest
যদি আপনি JUnit বা অনুরূপ কিছু ব্যবহার করার পটভূমি থেকে এসেছেন, যেখানে আপনি অন্য কোথাও যেমন ছিলেন একইভাবে ইউনিট পরীক্ষা লিখতে সক্ষম হতে চান।
doctest
শুরু করার জন্য), তবে শেষ পর্যন্ত এটির জন্য অনুশোচনা হয়েছিল। তুচ্ছ-পরীক্ষা-মামলার ক্ষেত্রে, আমি আমার সম্পাদকের সিনট্যাক্স হাইলাইটিং এবং স্ব-সমাপ্তির ক্ষতি হারিয়েছি। যখন পরীক্ষাগুলি পৃথক ফাইলে থাকত, তখন আমি এটিকে সম্পাদক থেকে সরাসরি চালাতে পারতাম না - আমাকে প্রতিবার সংশ্লিষ্ট উত্স ফাইলে প্রসঙ্গটি পরিবর্তন করতে হবে।
আমি এককভাবে একচেটিয়া ব্যবহার করি; আমি মনে করি ডক্টেস্ট মূল মডিউলটিকে খুব বেশি ছড়িয়ে দেয়। এটি সম্ভবত সম্পূর্ণ পরীক্ষা লেখার সাথে করতে হবে do
উভয় ব্যবহারই একটি বৈধ এবং বরং সহজ বিকল্প। doctest
মডিউল প্রদান করে DoctTestSuite
এবং DocFileSuite
পদ্ধতি যা একটি মডিউল অথবা ফাইল যথাক্রমে থেকে একটি unittest সামঞ্জস্যপূর্ণ testsuite তৈরি করুন।
সুতরাং আমি উভয়ই ব্যবহার করি এবং সাধারণত খুব কম বা কোনও সেটআপের প্রয়োজন না এমন ফাংশনগুলির সাথে সহজ পরীক্ষার জন্য ডক্টেস্ট ব্যবহার করি (যুক্তির জন্য সহজ প্রকারের)। আমি আসলে কিছু ডক্টেস্ট পরীক্ষা ফাংশনটি নথী না করে ডকুমেন্টে সহায়তা করে বলে মনে করি ।
তবে আরও জটিল ক্ষেত্রে এবং পরীক্ষার ক্ষেত্রে আরও বিস্তৃত সেটগুলির জন্য, আমি ইউনিটেট ব্যবহার করি যা আরও নিয়ন্ত্রণ এবং নমনীয়তা সরবরাহ করে।
আমি ইউনিটেস্টের প্রতিস্থাপন হিসাবে ডক্টেস্ট ব্যবহার করি না। যদিও তারা কিছুটা ওভারল্যাপ করে, দুটি মডিউলের একই ফাংশন নেই:
আমি unittest
ইউনিট পরীক্ষার কাঠামো হিসাবে ব্যবহার করি , এর অর্থ এটি কোডের বাকী অংশে যে কোনও পরিবর্তনের প্রভাব দ্রুত নির্ধারণ করতে সহায়তা করে।
আমি doctest
গ্যারান্টি হিসাবে ব্যবহার করি যে মন্তব্যগুলি (যথা ডকাস্ট্রিংস) কোডের বর্তমান সংস্করণের সাথে এখনও প্রাসঙ্গিক।
আমি পরীক্ষার দ্বারা চালিত বিকাশের বিস্তৃত নথিভুক্ত সুবিধা unittest
। doctest
কোড রক্ষণাবেক্ষণকে বিভ্রান্ত করার মত পুরানো মন্তব্য থাকার থেকে অনেক বেশি সূক্ষ্ম বিপদ সমাধান করে।
Doctest
কিছু সময় ভুল ফলাফল হতে পারে। বিশেষত যখন আউটপুটে এস্কেপ সিকোয়েন্স থাকে। উদাহরণ স্বরূপ
def convert():
"""
>>> convert()
'\xe0\xa4\x95'
"""
a = '\xe0\xa4\x95'
return a
import doctest
doctest.testmod()
দেয়
**********************************************************************
File "hindi.py", line 3, in __main__.convert
Failed example:
convert()
Expected:
'क'
Got:
'\xe0\xa4\x95'
**********************************************************************
1 items had failures:
1 of 1 in __main__.convert
***Test Failed*** 1 failures.
আউটপুট ধরণের পরীক্ষা করে না। এটি কেবল আউটপুট স্ট্রিংগুলির সাথে তুলনা করে। উদাহরণস্বরূপ এটি কিছু ধরণের যুক্তিযুক্ত তৈরি করেছে যা পুরো সংখ্যা হলে ঠিক পূর্ণসংখ্যার মতো প্রিন্ট করে। তাহলে ধরুন আপনার কাছে এমন ফাংশন রয়েছে যা যুক্তিসঙ্গতভাবে প্রত্যাবর্তন করবে। সুতরাং, যদি আউটপুটটি মূলদ পূর্ণ সংখ্যা বা পূর্ণসংখ্যার সংখ্যা হয় তবে ডক্টেস্ট আলাদা করতে পারবেন না।
r""" ... """
প্রথম সমস্যাটি সমাধান করতে আপনি কাঁচা ডকাস্ট্রিং ( ) ব্যবহার করতে পারেন ।
'\\xe0\\xa4\\x95'
এও কাজ করতে আপনার ডক্ট্রিংয়ে ব্যবহার করুন।
আমি আবিষ্কার ভিত্তিক সিস্টেমগুলি পছন্দ করি ("নাক" এবং "পাইস্টেস্ট", বর্তমানে প্রাক্তন ব্যবহার করে)।
ডক্টেস্টটি দুর্দান্ত হয় যখন টেস্টটি ডকুমেন্টেশন হিসাবেও ভাল থাকে, অন্যথায় তারা কোডটি খুব বেশি বিশৃঙ্খলা করে।