python - Python 子测试参数
问题描述
使用 python 的 unittest 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 解释器都会抱怨未解析的引用。
IE:
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 :subTest(msg=None, **params)
...msg 和 params 是可选的,任意值,只要子测试失败就会显示,让您清楚地识别它们。
所以看起来**params中传递的关键字参数仅用于在将测试状态打印到控制台时进行测试识别。它们不会以任何方式作为参数传递给代码块。
推荐阅读
- kendo-ui - Kendo MVC Grid ASP.NET Core 中不显示数据
- android - 颤振无法确定依赖关系':app:compileDebugJavaWithJavac'
- sas - 在 SAS 中使用宏时的语法问题
- react-native - 在渲染 JSX 部分之前使 useEffect 触发
- javascript - 单击按钮时JS方法执行两次
- java - 为什么我在使用 CustomListAdapter 时得到不同大小的列表行,即使我尝试为自定义列表行提供特定值
- postgresql - 如何在 Mac 上使用 CLI 与 PostgreSQL 交互?
- google-cloud-platform - 如何在 Google Cloud Platform 上安排虚拟机的开启和关闭?
- java - Java中的逆波兰表示法。检查不应在字符串数组中的任何符号或字符(正则表达式)
- python - 没有名为 Appkit 的模块。如果我尝试在 pycharm 中安装它,它会一直说“错误:命令错误,退出状态 1:”