ইউনিটেস্ট.স্টেস্টকেসের জন্য __init__


122

unittest.TestCaseক্লাসটি শুরু হওয়ার পরে যা করা হয় তার সাথে আমি কয়েকটি জিনিস যুক্ত করতে চাই তবে কীভাবে এটি করব তা আমি বুঝতে পারি না।

এখনই আমি এটি করছি:

#filename test.py

class TestingClass(unittest.TestCase):

    def __init__(self):
        self.gen_stubs()

    def gen_stubs(self):
        # Create a couple of tempfiles/dirs etc etc.
        self.tempdir = tempfile.mkdtemp()
        # more stuff here

আমি চাই সমস্ত পরীক্ষার পুরো সেটটির জন্য কেবল একবারই উত্পন্ন করা হোক। আমি ব্যবহার করতে পারছি না setUpClass()কারণ আমি পাইথন ২.৪ এ কাজ করছি (পাইথন ২.7 তেও আমি কাজ করতে পারিনি)।

আমি এখানে কি ভুল করছি?

আমি এই ত্রুটি পেয়েছি:

 `TypeError: __init__() takes 1 argument (2 given)` 

... এবং অন্যান্য ত্রুটিগুলি যখন আমি __init__কমান্ডের সাহায্যে এটি চালিত করি তখন সমস্ত স্টাব কোডের মধ্যে সরিয়ে ফেলি python -m unittest -v test


@ নীরাজ আমার কি মনে হয় যে আমার প্রশ্নটির একটি প্রাক-তারিখ?
5'14

@ অভিজিৎ এই প্রশ্নটি ২০১৩ সালে জিজ্ঞাসা করা হয়েছিল, আপনি যেটির সাথে লিঙ্ক করেছেন এটি ২০১ 2016 সালে জিজ্ঞাসা করা হয়েছিল, এবং এর কম উত্তর এবং বক্তৃতা রয়েছে, সম্ভবত আপনার অন্য প্রশ্নটি এর পরিবর্তে সদৃশ হিসাবে চিহ্নিত করা উচিত? পাইথন 3 সম্পর্কিত উত্তর সম্পর্কিত এবং এই প্রশ্নটি পাইথন 2 সম্পর্কে আলোচনা করে
ffledgling

আমার খারাপ সম্পর্কে দুঃখিত।
অভিজিৎ

উত্তর:


166

এটা চেষ্টা কর:

class TestingClass(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        super(TestingClass, self).__init__(*args, **kwargs)
        self.gen_stubs()

আপনি অগ্রাহ্য করা হয় TestCaseএর __init__, তাই আপনি আপনার জন্য বেস বর্গ হ্যান্ডেল আর্গুমেন্ট দিন করতে চাইতে পারেন।


+1 যদিও কোনও অবজেক্ট পদ্ধতিতে কল করার আগে আমি বেস ক্লাসটি শুরু করতাম।
জোচিম ইসাকসন

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

22
আপনি কি setUpওভাররাইডিংয়ের চেয়ে এটিকে ডাকছেন না __init__?
কার্তিকর

2
@ কার্থিকর আমি প্রতি পরীক্ষার জন্য প্রত্যেকবার পুনরায় তৈরি করার চেয়ে একবার সমস্ত পরীক্ষার জন্য স্টাবগুলি তৈরি করতে চাই। কিছু স্টাব এমনকি কিছু পরীক্ষা দ্বারা ব্যবহার করা হবে না। আমি সেটআপক্লাস ব্যবহার করব, তবে পাইথন ২.৪ এটি সমর্থন করে না বলে আমি মনে করি।
21'50 এ

2
আপনি এই ক্ষেত্রে আরও কিছুটা স্পষ্ট হতে পারেন (যা আমার মতে পাঠযোগ্যতার সাথে সহায়তা করে) এবং ব্যবহার করুন: unittest.TestCase.__init__(self,*args,**kwargs)পরিবর্তেsuper(TestingClass, self).__init__(*args, **kwargs)
অন্যুও

22

এর init ফাংশনটি ওভাররাইড করার বিষয়ে কিছু স্পষ্টতা যুক্ত করতে চেয়েছি

unittest.TestCase

আপনার পরীক্ষা ক্লাসে প্রতিটি পদ্ধতির আগে ফাংশনটি ডাকা হবে। দয়া করে নোট করুন যে আপনি যদি কিছু পরীক্ষা পদ্ধতি চালানোর আগে একবার সম্পাদন করা উচিত এমন কিছু ব্যয়বহুল কম্পিউটেশন যুক্ত করতে চান তবে সেটআপ ক্লাসের ক্লাসমেড ব্যবহার করুন

@classmethod
def setUpClass(cls):
    cls.attribute1 = some_expensive_computation()

ক্লাসের সমস্ত পরীক্ষা পদ্ধতিগুলির আগে এই ফাংশনটি একবার কল করা হবে। setUpপ্রতিটি পরীক্ষা পদ্ধতির আগে ডাকা একটি পদ্ধতি দেখুন ।


4

ইউনিটেস্ট 2 ইনস্টল করুন এবং সেই প্যাকেজের ইউনিটেস্ট ব্যবহার করুন।

import unittest2 

এবং তারপরে বিশেষ আরম্ভের যুক্তির জন্য সেটআপমডুল / টিয়ারডাউনমডিউল বা সেটআপক্লাস / টিয়ারডাউন ক্লাসটি ব্যবহার করুন

আরও তথ্য: http://www.voidspace.org.uk/python/articles/unittest2.shtml

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


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