পাইথন - ডকটেস্ট বনাম ইউনিটেষ্ট [বন্ধ]


160

আমি পাইথনে ইউনিট টেস্টিং শুরু করার চেষ্টা করছি এবং আমি ভাবছিলাম যে কেউ ডক্টেস্ট এবং ইউনিটেস্টের সুবিধা এবং অসুবিধাগুলি ব্যাখ্যা করতে পারে কিনা।

আপনি প্রতিটি পরিস্থিতিতে কি ব্যবহার করবেন?

উত্তর:


177

দুটোই মূল্যবান। আমি ইউনিটেস্টের স্থান গ্রহণ করে ডকটেস্ট এবং নাক উভয়ই ব্যবহার করি । পরীক্ষাগুলি এমন ব্যবহারের উদাহরণ দিচ্ছে যা ডকুমেন্টেশন হিসাবে প্রকৃতপক্ষে কার্যকর for সাধারণত আমি এই পরীক্ষাগুলিকে বিস্তৃত করি না, কেবলমাত্র তথ্যবহুলদের উদ্দেশ্যে। আমি কার্যকরভাবে বিপরীতে ডক্টেস্ট ব্যবহার করছি: আমার কোডটি আমার ডক্টেস্টের ভিত্তিতে সঠিক কিনা তা পরীক্ষা করতে নয়, তবে কোডের ভিত্তিতে আমার ডকুমেন্টেশন সঠিক কিনা তা পরীক্ষা করতে।

কারণটি হ'ল আমি জানতে পারি যে বিস্তৃত নথিগুলি আপনার ডকুমেন্টেশনগুলিকে অনেক বেশি বিশৃঙ্খলা করবে, সুতরাং আপনি হয় অকেজো ডকাস্ট্রিং বা অসম্পূর্ণ পরীক্ষা দিয়ে শেষ করবেন।

কোডটি পরীক্ষার জন্য , লক্ষ্যটি হ'ল প্রতিটি ক্ষেত্রে ভালভাবে পরীক্ষা করা, উদাহরণস্বরূপ কী হয় তা ব্যাখ্যা করার চেয়ে, যা একটি ভিন্ন লক্ষ্য যা আমি মনে করি যে অন্যান্য ফ্রেমওয়ার্কগুলি আরও ভালভাবে পূরণ করতে পারে।


29
অনেক কম বয়লারপ্লেট রয়েছে এবং আমি লেখার (এবং পড়ার) জন্য পরীক্ষাগুলি অনেক সহজ খুঁজে পাই। পরীক্ষাগুলি লিখতে স্বল্প প্রারম্ভিক ব্যয় (যেমন কেবল "টেস্ট_ফু ()" ফাংশন লিখুন এবং যান) আপনার পরীক্ষাগুলি পেরেক দেওয়ার আগে আকর্ষণীয় কোড বিটগুলি করার প্রলোভন থেকে লড়াই করতে সহায়তা করে।
ব্রায়ান

6
আমি মনে করি এটি একটি দুর্দান্ত উত্তর।
জেমস ব্র্যাডি

আপনি অন্য কোন টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করেন? নাকি এটি একচেটিয়াভাবে নাক?
জো

6
এই উত্তরটির বয়স দেওয়াতে সম্ভবত এটি উল্লেখ করা দরকার যে ইউনিটেটের পুরানো সংস্করণগুলির "বয়লারপ্লেট" অনেকটাই চলে গেছে। আমি এখনও নোজকে আরও ভাল পছন্দ করি তবে এটি বেশ টস-আপ।
অ্যাডাম পার্কিন

1
এফওয়াইআই নাক বিগত বেশ কয়েক বছর ধরে "রক্ষণাবেক্ষণ মোডে" রয়েছে এবং সম্ভবত সমস্ত বিকাশ বন্ধ হবে (তৃতীয় পক্ষের অনুপস্থিত)) এটি রক্ষণাবেক্ষণকারীরা নতুন প্রকল্পগুলির বিকল্প ব্যবহার করার পরামর্শ দিচ্ছেন।
ছয়

48

আমি ইউনিটেস্ট প্রায় একচেটিয়াভাবে ব্যবহার করি।

কিছুক্ষণের মধ্যে, আমি একটি ডক্ট্রাস্টিংয়ে এমন কিছু জিনিস রাখব যা ডক্টেস্টের দ্বারা ব্যবহারযোগ্য।

95% পরীক্ষার ক্ষেত্রে ইউনিটেস্ট হয়।

কেন? আমি ডকাস্ট্রিংগুলি কিছুটা খাটো এবং আরও অনেক কিছুতে রাখতে চাই। কখনও কখনও পরীক্ষার কেসগুলি একটি ডকাস্ট্রিং পরিষ্কার করতে সহায়তা করে। বেশিরভাগ সময়, ডকাস্ট্রিংয়ের জন্য আবেদনের পরীক্ষার কেসগুলি দীর্ঘ।


আপনি উদাহরণস্বরূপ, আপনি কি উপযুক্ত docstringএবং কি না উপযুক্ত দেখতে শীতল হবে । আমি প্রকৃতপক্ষে টার্মের ডক্ট্রিং পছন্দ করি যে এটি কোনও ইন্টারফেস কীভাবে ব্যবহার করতে হয় তা স্পষ্টভাবে দেখাচ্ছে, তবে এটি এবং ইউনিট পরীক্ষার জন্য এটি উভয়ই সঠিকভাবে মানায় না।
ব্যবহারকারী 1767754

33

ডক্টেস্টিংয়ের আরেকটি সুবিধা হ'ল আপনি নিশ্চিত করতে পারেন যে আপনার কোডটি আপনার ডকুমেন্টেশন যা বলে তাই করে। কিছুক্ষণ পরে, সফ্টওয়্যার পরিবর্তনগুলি আপনার ডকুমেন্টেশন এবং কোডকে বিভিন্ন জিনিস করতে পারে। :-)


6
+1 টি আমার কাছ থেকে - চমৎকার বিন্দু
ডগ

28

আমি বায়োইনফর্মেশিয়ান হিসাবে কাজ করি এবং আমি যে কোডটি লিখি তার বেশিরভাগটি হ'ল "এক সময়, একটি টাস্ক" স্ক্রিপ্ট, কোড যা কেবল একবার বা দু'বার চালিত হবে এবং এটি একটি নির্দিষ্ট নির্দিষ্ট কার্য সম্পাদন করে।

এই পরিস্থিতিতে, বড় ইউনিটসেটগুলি লিখতে ওভারকিল হতে পারে এবং ডক্টেসট একটি দরকারী আপস। এগুলি লেখার পক্ষে দ্রুত এবং এগুলি যেহেতু সাধারণত কোডটিতে অন্তর্ভুক্ত থাকে তাই অন্য ফাইল খোলা না রেখে কোডটি কীভাবে আচরণ করা উচিত সে সম্পর্কে তারা সর্বদা নজর রাখার অনুমতি দেয়। ছোট স্ক্রিপ্ট লেখার সময় এটি দরকারী।

এছাড়াও, ডকুমেন্টগুলি কার্যকর যখন আপনি কোনও স্ক্রিপ্ট কোনও গবেষকের কাছে দিতে হয় যা প্রোগ্রামিংয়ে দক্ষ নয়। কিছু লোককে ইউনিটেটগুলি কীভাবে কাঠামোগত করা হয় তা বোঝা খুব কঠিন মনে হয়; অন্যদিকে ডক্টেটগুলি ব্যবহারের সহজ উদাহরণ, যাতে লোকেরা কীভাবে এটি ব্যবহার করতে হয় সেগুলি দেখার জন্য সেগুলি কেবল অনুলিপি করে আটকান।

সুতরাং, আমার উত্তরটি পুনরায় শুরু করতে: ডেক্সটেটগুলি তখন কার্যকর হয় যখন আপনাকে ছোট স্ক্রিপ্টগুলি লিখতে হয় এবং যখন আপনাকে সেগুলি পাস করতে হয় বা গবেষকদের কাছে দেখাতে হয় যা কম্পিউটার বিজ্ঞানী নয়।


6
"যখন আপনাকে ছোট স্ক্রিপ্টগুলি লিখতে হবে এবং যখন আপনি এগুলি পাস করতে বা কম্পিউটার বিজ্ঞানী নন এমন গবেষকদের দেখিয়ে দিতে হবে তখন নথিগুলি কার্যকর হয়।" দুর্দান্ত পয়েন্ট। আমি একই কাজ করি এবং পাইথনবিহীন প্রোগ্রামাররা সর্বদা বিস্মিত হন যে ডকুমেন্টেশনটি কার্যকর করা যায়।
ড্যানিয়েল কানাস

14

আপনি যদি কেবল ইউনিট টেস্টিংয়ের ধারণাটি দিয়ে শুরু করছেন, তবে আমি এটি শুরু করব doctestকারণ এটি ব্যবহার করা সহজ। এটি স্বাভাবিকভাবেই কিছু স্তরের ডকুমেন্টেশন সরবরাহ করে। এবং এর সাথে আরও বিস্তৃত পরীক্ষার জন্য doctest, আপনি কোনও বাহ্যিক ফাইলে পরীক্ষা করতে পারেন যাতে এটি আপনার ডকুমেন্টেশনগুলিকে বিশৃঙ্খলা না করে।

আমি আপনাকে পরামর্শ দিচ্ছি unittestযদি আপনি JUnit বা অনুরূপ কিছু ব্যবহার করার পটভূমি থেকে এসেছেন, যেখানে আপনি অন্য কোথাও যেমন ছিলেন একইভাবে ইউনিট পরীক্ষা লিখতে সক্ষম হতে চান।


4
আমি এই দিকে উত্সাহিত হয়েছিল ( doctestশুরু করার জন্য), তবে শেষ পর্যন্ত এটির জন্য অনুশোচনা হয়েছিল। তুচ্ছ-পরীক্ষা-মামলার ক্ষেত্রে, আমি আমার সম্পাদকের সিনট্যাক্স হাইলাইটিং এবং স্ব-সমাপ্তির ক্ষতি হারিয়েছি। যখন পরীক্ষাগুলি পৃথক ফাইলে থাকত, তখন আমি এটিকে সম্পাদক থেকে সরাসরি চালাতে পারতাম না - আমাকে প্রতিবার সংশ্লিষ্ট উত্স ফাইলে প্রসঙ্গটি পরিবর্তন করতে হবে।
অডথিংকিং

7

আমি এককভাবে একচেটিয়া ব্যবহার করি; আমি মনে করি ডক্টেস্ট মূল মডিউলটিকে খুব বেশি ছড়িয়ে দেয়। এটি সম্ভবত সম্পূর্ণ পরীক্ষা লেখার সাথে করতে হবে do


7

উভয় ব্যবহারই একটি বৈধ এবং বরং সহজ বিকল্প। doctestমডিউল প্রদান করে DoctTestSuiteএবং DocFileSuiteপদ্ধতি যা একটি মডিউল অথবা ফাইল যথাক্রমে থেকে একটি unittest সামঞ্জস্যপূর্ণ testsuite তৈরি করুন।

সুতরাং আমি উভয়ই ব্যবহার করি এবং সাধারণত খুব কম বা কোনও সেটআপের প্রয়োজন না এমন ফাংশনগুলির সাথে সহজ পরীক্ষার জন্য ডক্টেস্ট ব্যবহার করি (যুক্তির জন্য সহজ প্রকারের)। আমি আসলে কিছু ডক্টেস্ট পরীক্ষা ফাংশনটি নথী না করে ডকুমেন্টে সহায়তা করে বলে মনে করি ।

তবে আরও জটিল ক্ষেত্রে এবং পরীক্ষার ক্ষেত্রে আরও বিস্তৃত সেটগুলির জন্য, আমি ইউনিটেট ব্যবহার করি যা আরও নিয়ন্ত্রণ এবং নমনীয়তা সরবরাহ করে।


7

আমি ইউনিটেস্টের প্রতিস্থাপন হিসাবে ডক্টেস্ট ব্যবহার করি না। যদিও তারা কিছুটা ওভারল্যাপ করে, দুটি মডিউলের একই ফাংশন নেই:

  • আমি unittestইউনিট পরীক্ষার কাঠামো হিসাবে ব্যবহার করি , এর অর্থ এটি কোডের বাকী অংশে যে কোনও পরিবর্তনের প্রভাব দ্রুত নির্ধারণ করতে সহায়তা করে।

  • আমি doctestগ্যারান্টি হিসাবে ব্যবহার করি যে মন্তব্যগুলি (যথা ডকাস্ট্রিংস) কোডের বর্তমান সংস্করণের সাথে এখনও প্রাসঙ্গিক।

আমি পরীক্ষার দ্বারা চালিত বিকাশের বিস্তৃত নথিভুক্ত সুবিধা unittestdoctestকোড রক্ষণাবেক্ষণকে বিভ্রান্ত করার মত পুরানো মন্তব্য থাকার থেকে অনেক বেশি সূক্ষ্ম বিপদ সমাধান করে।


4

আমি প্রায় কখনও ডক্টেট ব্যবহার করি না। আমি চাই আমার কোডটি স্ব নথিভুক্ত হোক এবং ডকস্টাস্টিংগুলি ব্যবহারকারীর জন্য দস্তাবেজ সরবরাহ করে। আইএমও একটি মডিউলে কয়েকশ লাইনের টেস্ট যুক্ত করে ডকাস্ট্রিংগুলিকে অনেক কম পাঠযোগ্য করে তোলে। আমি যখন প্রয়োজন তখন ইউনিট পরীক্ষাগুলি সংশোধন করা আরও সহজ।


4

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. 

আউটপুট ধরণের পরীক্ষা করে না। এটি কেবল আউটপুট স্ট্রিংগুলির সাথে তুলনা করে। উদাহরণস্বরূপ এটি কিছু ধরণের যুক্তিযুক্ত তৈরি করেছে যা পুরো সংখ্যা হলে ঠিক পূর্ণসংখ্যার মতো প্রিন্ট করে। তাহলে ধরুন আপনার কাছে এমন ফাংশন রয়েছে যা যুক্তিসঙ্গতভাবে প্রত্যাবর্তন করবে। সুতরাং, যদি আউটপুটটি মূলদ পূর্ণ সংখ্যা বা পূর্ণসংখ্যার সংখ্যা হয় তবে ডক্টেস্ট আলাদা করতে পারবেন না।


5
r""" ... """প্রথম সমস্যাটি সমাধান করতে আপনি কাঁচা ডকাস্ট্রিং ( ) ব্যবহার করতে পারেন ।
ickতুফয়ে

পাইথন 3.4 এ সূক্ষ্মভাবে কাজ করে। এটি পাইথন ২.7 '\\xe0\\xa4\\x95'এও কাজ করতে আপনার ডক্ট্রিংয়ে ব্যবহার করুন।
সিস টিমারম্যান

আমি এটিও দেখতে পেয়েছি যে ইউনিকোড লিটারেলগুলি ডক্টেটগুলি নিয়েও কাজ করে না (এমনকি ফাইলের শীর্ষে ডান 'কোডিং utf-8' মন্তব্য লাইনের সাহায্যেও। এটি স্থির হয় না
রিচভেল

2

আমি আবিষ্কার ভিত্তিক সিস্টেমগুলি পছন্দ করি ("নাক" এবং "পাইস্টেস্ট", বর্তমানে প্রাক্তন ব্যবহার করে)।

ডক্টেস্টটি দুর্দান্ত হয় যখন টেস্টটি ডকুমেন্টেশন হিসাবেও ভাল থাকে, অন্যথায় তারা কোডটি খুব বেশি বিশৃঙ্খলা করে।


নাক অবিশ্বাস্যভাবে দরকারী মনে হয়; আমি এখনও এটি ব্যবহারের সুযোগ পাইনি, তবে আমার উচ্চ আশা রয়েছে :)
টনি আরক্লেস

আইএমও, নাকটি ব্যবহার করা সবচেয়ে সহজ পরীক্ষার কাঠামো pretty এটি পরীক্ষার কেসগুলি লেখার এবং চলমানকে অনেকটা অনায়াসে করে তোলে।
কামিল কিসিয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.