পাইথন কাঠামোর মধ্যে setUp()এবং setUpClass()মধ্যে পার্থক্য কী unittest?
মূল পার্থক্য (যেমন বেঞ্জামিন হজসনের উত্তরে উল্লিখিত) এটি setUpClassকেবল একবার বলা হয় এবং এটি সমস্ত পরীক্ষার আগে, যখন setUpপ্রতিটি পরীক্ষার আগেই ডাকা হয়। (এনবি: একই পাইথনের নয়, অন্যান্য এক্স ইউনাইট টেস্ট ফ্রেমওয়ার্কগুলিতেও সমতুল্য পদ্ধতির ক্ষেত্রে এটি একই প্রযোজ্য unittest))
unittest ডকুমেন্টেশন থেকে :
setUpClass()
একটি পৃথক শ্রেণিতে পরীক্ষা চালানোর আগে ডাকা একটি শ্রেণির পদ্ধতি। সেটআপ ক্লাসকে ক্লাসের সাথে একমাত্র যুক্তি হিসাবে ডাকা হয় এবং অবশ্যই তাকে শ্রেণীবদ্ধ () হিসাবে সাজানো উচিত:
@classmethod
def setUpClass(cls):
...
এবং:
setUp()
পরীক্ষার স্থিরতা প্রস্তুত করার জন্য পদ্ধতিটি ডাকা হয়। এটি পরীক্ষা পদ্ধতি কল করার আগেই বলা হয়; AssertionError বা SkipTest ব্যতীত, এই পদ্ধতিতে উত্থাপিত কোনও ব্যতিক্রম পরীক্ষা ব্যর্থতার পরিবর্তে ত্রুটি হিসাবে বিবেচিত হবে। ডিফল্ট বাস্তবায়ন কিছুই করে না।
সেটআপটি অন্য পদ্ধতিতে কেন একটি পদ্ধতিতে পরিচালিত হবে?
প্রশ্নের এই অংশটির এখনও উত্তর দেওয়া হয়নি। গিয়ারের উত্তরের জবাবে আমার মন্তব্য অনুসারে, setUpপদ্ধতিটি এমন পরীক্ষার উপাদানগুলির জন্য যা সমস্ত পরীক্ষার জন্য সাধারণ (প্রতিটি পরীক্ষায় সেই কোডটির অনুলিপি এড়ানোর জন্য) বোঝানো হয়। আমি এটি প্রায়শই ডুপ্লিকেশন অপসারণ (সাধারণত) পঠনযোগ্যতা উন্নত করে এবং রক্ষণাবেক্ষণের বোঝা হ্রাস করে বলে দরকারী।
setUpClassপদ্ধতি ব্যয়বহুল উপাদানের জন্য আপনি বরং শুধুমাত্র যেমন একটি ডাটাবেস সংযোগ ইত্যাদি খুলে ফাইলসিস্টেম একটি অস্থায়ী ফাইল খোলার, টেস্টিং জন্য একটি ভাগ গ্রন্থাগার লোড, এই ধরনের জিনিসগুলি আগে প্রতিটি পরীক্ষা মন্দীভূত করবে, একবার যা করতে হবে যে পরীক্ষার স্যুটটি খুব বেশি, সুতরাং আমরা সমস্ত পরীক্ষার আগে কেবল এটি করি। এটি পরীক্ষাগুলির স্বাধীনতায় কিছুটা অবনতি হলেও কিছু পরিস্থিতিতে প্রয়োজনীয় অপ্টিমাইজেশন। যুক্তিযুক্তভাবে, ইউনিট টেস্টে এমন কোনও কাজ করা উচিত নয় কারণ সাধারণত আসল জিনিসটি ব্যবহার না করেই ডাটাবেস / ফাইল সিস্টেম / লাইব্রেরি / যাই হোক না কেন উপহাস করা সম্ভব। যেমন, আমি খুঁজে পাই যে setUpClassখুব কমই প্রয়োজন হয়। তবে উপরের উদাহরণগুলি পরীক্ষা করার সময় এটি দরকারী (বা অনুরূপ) প্রয়োজনীয় হয়ে ওঠে।