Python子测试参数

Python子测试参数,python,python-unittest,Python,Python Unittest,当使用python的unittest时,我对参数在子测试中的命名和作用域感到困惑 上面链接中给出的规范示例似乎暗示了with self.subtest()子句中使用的参数可以作为关键字参数传递给subtest()。作为参考,所示示例如下: class NumbersTest(unittest.TestCase): def test_even(self): """ Test that numbers between 0 and

当使用python的unittest时,我对参数在子测试中的命名和作用域感到困惑

上面链接中给出的规范示例似乎暗示了
with self.subtest()
子句中使用的参数可以作为关键字参数传递给
subtest()
。作为参考,所示示例如下:

class NumbersTest(unittest.TestCase):

    def test_even(self):
        """
        Test that numbers between 0 and 5 are all even.
        """
        for i in range(0, 6):
            with self.subTest(i=i):
                self.assertEqual(i % 2, 0)
它使用了一种不明确的约定,将内部作用域变量命名为与参数相同的变量(
i=i
)。我认为这意味着关键字参数名称作为内部作用域变量名称。然而,当我尝试创建自己的测试时,我发现PyCharm和python解释器都抱怨,如果关键字参数的名称与用作参数输入的外部作用域变量的名称不完全相同,则会出现未解析的引用

i、 e:

classnumberstest(unittest.TestCase):
def测试_偶数(自):
"""
测试0和5之间的数字是否都是偶数。
"""
对于范围(0,6)内的i:

对于self.subTest(num=i):#我认为,如果在文档中对此进行更多的阐述,那将是一件好事,但状态:

…msg和params是可选的、任意显示的值 每当子测试失败时,允许您清楚地识别它们


因此,在将测试状态打印到控制台时,**参数中传递的关键字参数似乎仅用于测试标识。它们不会以任何方式作为参数传递到代码块。

在我看来,如果在文档中详细阐述一下这一点会更好,但是状态:

…msg和params是可选的、任意显示的值 每当子测试失败时,允许您清楚地识别它们

因此,在将测试状态打印到控制台时,**参数中传递的关键字参数似乎仅用于测试标识。它们不会以任何方式作为参数传递给代码块

class NumbersTest(unittest.TestCase):

    def test_even(self):
        """
        Test that numbers between 0 and 5 are all even.
        """
        for i in range(0, 6):
            with self.subTest(num=i):  # <-- Renamed keyword argument parameter
                self.assertEqual(num % 2, 0)  # < -- Results in unresolved reference error "num"