【问题标题】:How do I get the unit test test name如何获取单元测试测试名称
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多