gpt4 book ai didi

Python 子测试参数

转载 作者:行者123 更新时间:2023-12-04 15:19:24 26 4
gpt4 key购买 nike

使用 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 displayedwhenever a subtest fails, allowing you to identify them clearly.

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com