जब परीक्षण सेटअप में महत्वपूर्ण ओवरलैप होता है, तो यह चीजों को विरासत का उपयोग करने के लिए DRY रख सकता है। लेकिन इस परीक्षा निष्पादन के अनावश्यक दोहराव के साथ मुद्दों का कारण बनता है:व्युत्पन्न कक्षाओं में परीक्षण पेरेंट क्लास परीक्षणों का पुन: प्रयास क्यों करते हैं?
from unittest import TestCase
class TestPotato(TestCase):
def test_in_parent(self):
print 'in parent'
class TestSpud(TestPotato):
def test_in_child(self):
print 'in child'
परीक्षण इस मॉड्यूल दो बार test_in_parent
चलाता है।
$ python -m unittest example
in parent
.in child
.in parent
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
क्यों? क्या यह डिजाइन द्वारा है? क्या यह एक निश्चित तरीके से परीक्षण धावक को कॉन्फ़िगर करके अक्षम किया जा सकता है?
मैं एक गैर-खोजी कक्षा में सेटअप को स्थानांतरित करके इस मुद्दे को हल कर सकता हूं, और फिर एकाधिक उत्तराधिकारी का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि यह थोड़ा हैकी और अनावश्यक है।
ध्यान दें: एक ही समस्या इस तरह के नाक (nosetests -s example.py
) और pytest (py.test example.py
)
क्योंकि वे अपने माता-पिता का परीक्षण तरीकों के वारिस है, तो (या '__dict__' या जो कुछ भी यह करता है) 'test_' से शुरू होने वाली विधियों के लिए यह विरासत में भी पाता है। मुझे नहीं लगता कि इसे हल करने के लिए * एकाधिक * विरासत की आवश्यकता है; अमूर्त दोनों को तीसरे, अनदेखा वर्ग की आवश्यकता नहीं है, जिसमें 'test_' विधियां नहीं हैं और इन दोनों को इसका वारिस है। – jonrsharpe
एक उप-वर्ग का आत्मनिरीक्षण जिसमें अभिभावक वर्ग है जिसमें परीक्षण द्वारा उपसर्ग किए गए तरीके शामिल हैं, वे विधियों के साथ सबक्लास दिखाएंगे। यह अजगर ओओपी है। मुझे नहीं लगता कि मिश्रित करने के लिए सेटअप विधियों को ले जाना या एक अलग बेस क्लास के रूप में हैकी लगता है, और शायद DRYer – dm03514
परीक्षणों के विभिन्न "समूहों" के लिए मिश्रणों के लिए एक महान उपयोग केस की तरह लगता है ताकि आपको आवश्यक सटीक परीक्षण को गतिशील रूप से बनाया जा सके। ..्री-विरासत यहां सही मॉडल की तरह नहीं दिखता है। – Shashank