वर्तमान में मेरे पास कई समानतम टेस्टकेस हैं। प्रत्येक टेस्टकेस में डेटा (इनपुट मान + अपेक्षित आउटपुट मान) और तर्क शामिल होते हैं (एसयूटी को कॉल करें और अपेक्षित आउटपुट के साथ वास्तविक आउटपुट की तुलना करें)।विरासत
मैं तर्क से डेटा को अलग करना चाहता हूं। इस प्रकार मैं एक बेस क्लास चाहता हूं जिसमें केवल तर्क और व्युत्पन्न कक्षा हो जिसमें केवल डेटा शामिल हो। मैं अब तक इस के साथ आया था:
import unittest
class MyClass():
def __init__(self, input):
self.input = input
def get_result(self):
return self.input * 2
class TestBase(unittest.TestCase):
def check(self, input, expected_output):
obj = self.class_under_test(input)
actual_output = obj.get_result()
self.assertEqual(actual_output, expected_output)
def test_get_result(self):
for value in self.values:
self.check(value[0], value[1])
class TestMyClass(TestBase):
def __init__(self, methodName='runTest'):
unittest.TestCase.__init__(self, methodName)
self.class_under_test = MyClass
self.values = [(1, 2), (3, 6)]
unittest.main(exit = False)
लेकिन यह निम्न त्रुटि के साथ विफल:
AttributeError: 'TestBase' object has no attribute 'values'
दो सवाल:
- मेरी 'डिजाइन' किसी भी अच्छा है?
- इसे काम करने के लिए अभी भी क्या आवश्यक है?
ध्यान दें कि यह असामान्य है (मेरे अनुभव) किसी भी चीज़ के लिए 'टेस्टकेस .__ init__' का उपयोग करने के लिए। आम तौर पर, प्रारंभिक कोड 'TestCase.setUp' में जाता है। – mgilson