मुझे किसी भी सामान्य परीक्षण ढांचे में इसके लिए किसी भी बिल्टिन से अवगत नहीं है। आपके समाधान के साथ एकमात्र समस्या यह है कि पुनरावृत्ति परीक्षण के अंदर है। बल्कि यह बाहर हो सकता है और परीक्षण, हो सकता है इस
import unittest
def _apply(func, args):
"""Return a function with args applied after first argument"""
def wrapped(self):
return func(self, *args)
return wrapped
class TheoryMeta(type):
"""Metaclass that replaces test methods with multiple methods for each test case"""
def __new__(meta, name, bases, attrs):
newattrs = {}
cases = attrs.pop('cases', [])
for name, value in attrs.items():
if not name.startswith('test') or not callable(value):
newattrs[name] = value
continue
for n, args in enumerate(cases):
test_name = '%s_%d' % (name, n)
newattrs[test_name] = _apply(value, args)
return super().__new__(meta, name, bases, newattrs)
class TestCase(unittest.TestCase, metaclass=TheoryMeta):
pass
तो यह उपयोग करने के लिए की तरह कुछ उत्पन्न करनी चाहिए, एक TestCase
उपवर्ग एक cases
विशेषता है जो परीक्षण मामले पर प्रत्येक परीक्षा पद्धति को लागू करने के लिए तर्कों की सूची है कि बनाने के ।
class TestAdd(TestCase):
cases = [
# (a, b)
(1, 1),
(2, 0),
(3, 0),
]
def test_add(self, a, b):
self.assertEqual(a + b, 2)
======================================================================
FAIL: test_add_2 (__main__.__qualname__)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 7, in wrapped
return func(self, *args)
File "test.py", line 41, in test_add
self.assertEqual(a + b, 2)
AssertionError: 3 != 2
----------------------------------------------------------------------
Ran 3 tests in 0.001s
अपनी आवश्यकताओं और परीक्षण सेटअप के आधार पर, आप पा सकते बेहतर बल्कि एक metaclass का उपयोग करने से सिर्फ बंदर-पैच एक testcase पर उत्पन्न परीक्षण तरीकों के लिए। या आप उन्हें TestLoader
पर ओवरराइडन loadTestsFrom... में उत्पन्न कर सकते हैं। किसी भी मामले में, परीक्षण विधियों को उत्पन्न करने के लिए नमूना डेटा का उपयोग करें।
'try-catch' – Gocht
का उपयोग करें यह मेरी समझ है कि सभी मामले चलेंगे, लेकिन परीक्षण विफल हो जाएगा (जैसा कि यह होना चाहिए) –
@Adammith: '' 'मामलों' के भीतर प्रत्येक टुपल अनिवार्य रूप से एक अलग परीक्षण केस है । यदि लूप के माध्यम से पहली बार विफल रहता है, तो लूप के माध्यम से कोई और पुनरावृत्ति नहीं होगी और ऐसे बाद के मामलों को निष्पादित नहीं किया जाएगा। –