如何获得单元测试测试名称

时间:2019-05-07 22:57:20

标签: python python-3.x python-2.7 python-unittest

我写了一些单元测试。基本测试是可重用的,并且我使用验证功能以测试名称注销失败。这些示例说调用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))

1 个答案:

答案 0 :(得分:-1)

https://docs.python.org/3/library/unittest.html#unittest.TestCase.shortDescription

  

返回测试的描述,如果没有提供描述,则返回None。此方法的默认实现返回测试方法的文档字符串的第一行(如果有),或者返回无。   在版本3.1中进行了更改:在3.1中进行了更改,即使在存在文档字符串的情况下也将测试名称添加到简短描述中。这导致与unittest扩展的兼容性问题,并且将测试名称添加到了Python 3.2中的TextTestResult中。