por*_*unt 3 python unit-testing pytest
我有一个关于pytest的"概念"问题以及我应该如何处理多个测试.
假设我需要为一堆字符串测试一些内容:names = [" ", "a ", " a", " a "].
我可以创建多个test_函数来单独测试它们,但它们将完全相同,但具有不同的输入.
我在想做类似的事情:
def test_names():
names = [" ", "a ", " a", " a "]
for name in names:
with pytest.raises(errors.MyFooError) as ex:
random_method(name)
Run Code Online (Sandbox Code Playgroud)
问题是:这样做,如果一个元素没有引发errors.MyFooError,我会收到这个:
Failed: DID NOT RAISE <class 'errors.MyFooError'
Run Code Online (Sandbox Code Playgroud)
该消息是通用的,我不知道发生了哪个元素.
我可能会分成4个测试,一个用于列表中的每个元素,我想这是正确的方法吗?如果列表很大,会发生什么?
您应该使用此处所示的parametrize功能.pytest
你的代码看起来像
import pytest
@pytest.mark.parametrize('input', [" ", "a ", " a", " a "])
def test_names(input):
with pytest.raises(errors.MyFooError) as ex:
random_method(input)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |