【发布时间】:2016-08-09 02:57:52
【问题描述】:
我有一个基本的生成器函数,如果在执行任何yield 之前其参数不正确,则会引发异常。
def my_generator(n):
if not isistance(n, int):
raise TypeError("Expecting an integer")
for i in range(1, 3):
yield n
我想用单元测试覆盖我的整个项目,所以我实现了这个测试功能:
import pytest
from my_package import my_generator
@pytest.mark.parametrize("n, expected_exception", [
("1", TypeError), (1.0, TypeError), ([1], TypeError)
])
def test_my_generator_with_bad_parameters(n, expected_exception):
with pytest.raises(expected_exception):
my_generator(n)
但是当我运行 pytest 时,我得到:
失败:没有提出
但是,如果我修改测试以迭代生成的生成器,则测试通过。
def test_my_generator_with_bad_parameters(n, expected_exception):
res = my_generator(n)
with pytest.raises(expected_exception):
next(res)
我应该如何编写这个测试?有没有办法修改my_generator 以便我的单元测试的第一个实现通过(假设函数仍然是生成器)?
【问题讨论】:
标签: python python-3.x exception generator pytest