我写了一些单元测试。基本测试是可重用的,并且我使用验证功能以测试名称注销失败。这些示例说调用id()或_testMethodName(unittest.TestCase.id()),但由于我不再处于unittest类(python 2.7)中,因此两者均无效。在python中,我不知道如何动态获取活动的unittest运行程序。
如果运行下面的示例,您会看到随着堆栈深度的更改,有时会打印可重复使用的测试名称。变通方法是骇人听闻的。
这只是调试代码,信息很重要,因为我创建的日志需要知道测试名称,因此其他信息会打印在测试名称旁边。我不希望测试作者在他或她的测试中编写其他代码。
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))
答案 0 :(得分:-1)
https://docs.python.org/3/library/unittest.html#unittest.TestCase.shortDescription
返回测试的描述,如果没有提供描述,则返回None。此方法的默认实现返回测试方法的文档字符串的第一行(如果有),或者返回无。 在版本3.1中进行了更改:在3.1中进行了更改,即使在存在文档字符串的情况下也将测试名称添加到简短描述中。这导致与unittest扩展的兼容性问题,并且将测试名称添加到了Python 3.2中的TextTestResult中。