Python 子测试参数

标签 python python-unittest

使用 python 的单元测试时 subtest , 我对子测试中参数的命名和范围感到困惑。

上面链接中给出的规范示例似乎暗示 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 解释器都会提示未解析的引用。

即:

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"

如何将参数传递给子测试?它们在子测试代码块中是如何命名和引用的?

最佳答案

在我看来,如果在文档中对此进行更多阐述会很好,但是 API for subTest(msg=None, **params)状态:

...msg and params are optional, arbitrary values which are displayed whenever a subtest fails, allowing you to identify them clearly.

所以看起来**params 中传递的关键字参数只是在向控制台打印测试状态时用于测试标识。它们不会以任何方式作为参数传递给代码块。

关于Python 子测试参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63673724/

相关文章:

python - 将 Python 字典序列化为 Cassandra 1.2 列

python - 不区分大小写的 argparse 选择不会丢失选择列表中的大小写信息

Python - 如何断言未使用特定参数调用模拟对象?

python - 抑制单元测试中的打印输出

python - 模拟位于 __init__.py 中的方法

python - 如何在 pyUnit 中创建类范围的测试装置?

python - pytest下unittest subTest元素的输出不足

python - 如何将打印输出分配给变量?

python - 如何在本地测试 Map 和 Reduce 代码?

Python - 将元组列表转换为字符串