【发布时间】:2019-05-07 22:57:20
【问题描述】:
我已经编写了一些单元测试。基本测试是可重用的,我使用验证功能以测试名称注销失败。这些例子说调用 id() 或 _testMethodName (unittest.TestCase.id()) 但都不起作用,因为我不再在 unittest 类(python 2.7)中。在 python 中,我不知道如何动态获取活动的单元测试运行器。
如果您运行下面的示例,您会看到它有时会随着堆栈深度的变化打印出可重用的测试名称。变通方法是骇人听闻的。
这只是调试代码,信息很重要,因为我创建的日志需要知道测试名称,所以附加信息会打印在测试名称旁边。我不希望测试编写者在他或她的测试中编写额外的代码。
import unittest
import inspect
currentFuncName = lambda n=0: sys._getframe(n + 3).f_code.co_name
def verify( expected, actual ):
# 'id(): ' + str(unittest.TestCase.id()) # Something like this
# print 'id: ' + str(id()).split()[4] # a hack
# 'curFrame(): ' + str(inspect.currentframe().f_code.co_name) # hack
# 'stack: ' + str(inspect.stack()[2][3]) # a hack
print 'curFuncName: ' + currentFuncName() # a hack
# Reusable Test
def theTest( exp ):
actual = 'keith2'
verify( exp, actual )
def otherTest( exp ):
theTest( exp )
class SomeTests(unittest.TestCase):
def setUp(self):
print('mName: %s' % (self._testMethodName))
# print('Short: %s' % (self.shortDescription())) // Returns none
def test_one(self):
# print 'name: ' + str(self.TestCase.id())
theTest( 'keith' )
def test_two(self):
otherTest( 'keith')
if __name__ == '__main__':
unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))
【问题讨论】:
标签: python python-3.x python-2.7 python-unittest