Lau*_*uza 20 python pytest python-3.x python-3.7
def fatorial(n):
if n <= 1:
return 1
else:
return n*fatorial(n - 1)
import pytest
@pytest.mark.parametrize("entrada","esperado",[
(0,1),
(1,1),
(2,2),
(3,6),
(4,24),
(5,120)
])
def testa_fatorial(entrada,esperado):
assert fatorial(entrada) == esperado
Run Code Online (Sandbox Code Playgroud)
错误:
ERROR collecting Fatorial_pytest.py ____________________________________________________________________
In testa_fatorial: indirect fixture '(0, 1)' doesn't exist
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我得到了“间接夹具”。知道吗?我使用的是 python 3.7 和 windows 10 64 位。
Mat*_*hak 49
TL;DR -
问题出在线路上
@pytest.mark.parametrize("entrada","esperado",[ ... ])
Run Code Online (Sandbox Code Playgroud)
它应该写成一个逗号分隔的字符串:
@pytest.mark.parametrize("entrada, esperado",[ ... ])
Run Code Online (Sandbox Code Playgroud)
你得到的是indirect fixture因为 pytest 无法解压给定的,argvalues因为它有一个错误的argnames参数。您需要确保所有参数都写为一个字符串。
请参阅文档:
内置的 pytest.mark.parametrize 装饰器可以对测试函数的参数进行参数化。
参数:
1. argnames – 一个逗号分隔的字符串,表示一个或多个参数名称,或参数字符串的列表/元组。
2. argvalues – argvalues列表决定了使用不同参数值调用测试的频率。
意思是,您应该将要参数化的参数编写为单个字符串,并使用逗号分隔它们。因此,您的测试应如下所示:
@pytest.mark.parametrize("n, expected", [
(0, 1),
(1, 1),
(2, 2),
(3, 6),
(4, 24),
(5, 120)
])
def test_factorial(n, expected):
assert factorial(n) == expected
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6256 次 |
| 最近记录: |