आप कुछ बॉयलरप्लेट कोड को जोड़ने के साथ ठीक कर रहे हैं परीक्षणों के लिए, निम्नलिखित की तरह कुछ काम कर सकता है।
माईटेस्ट 1 में, tearDown
प्रत्येक परीक्षण के अंत में बुलाया जाता है, और self.result का मान विधि नाम और एक शब्दकोश युक्त टुपल पर सेट किया गया है (लेकिन आप जो भी चाहें उसे सेट कर सकते हैं)। निरीक्षण मॉड्यूल का उपयोग विधि नाम प्राप्त करने के लिए किया जाता है, इसलिए tearDown
जानता है कि कौन सा परीक्षण अभी भाग गया है।
MyTest2 में, सभी परिणाम एक शब्दकोश (results
) है, जो तुम क्या आप tearDownClass
विधि में पसंद के साथ कर सकते में सहेजे जाते हैं।
import inspect
import unittest
class MyTest1(unittest.TestCase):
result = None
def tearDown(self):
print "tearDown:", self.result
def test_aaa(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.result = (name, None)
x = 1 + 1
self.assertEqual(x, 2)
self.result = (name, dict(x=x))
def test_bbb(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.result = (name, None)
# Intentional fail.
x = -1
self.assertEqual(x, 0)
self.result = (name, dict(x=x))
class MyTest2(unittest.TestCase):
results = {}
@classmethod
def tearDownClass(cls):
print "tearDownClass:", cls.results
def test_aaa(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.results[name] = None
x = 1 + 1
self.assertEqual(x, 2)
self.results[name] = dict(x=x)
def test_bbb(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.results[name] = None
x = -1
self.assertEqual(x, 0)
self.results[name] = dict(x=x)
if __name__ == '__main__':
unittest.main()
स्रोत
2012-09-06 04:20:38
चूंकि यह थोड़ा हैकिश और संभवतः भंगुर है (उदाहरण के लिए पायथन 3 में परीक्षण नहीं किया गया है), डाउनवोट है शायद यह योग्य है। मैं इसे अपने उत्पादन कोड में उपयोग नहीं करूँगा। दूसरी तरफ, ऐसा लगता है; व्यावहारिकता शुद्धता को धड़कता है और यह सब –