【问题标题】:Asserting a value error with property based testing使用基于属性的测试断言值错误
【发布时间】:2020-08-09 17:52:21
【问题描述】:
我有一个函数可以返回数字num 的除数。如果数字为 negative,则该函数会引发错误。
我正在使用假设库来测试此函数,但我不确定如何使其成为基于属性的测试。
这是我的测试:
@given(strategies.integers())
def test_valid(num):
with pytest.raises(ValueError):
divisors(-3)
此代码有效,但我如何更改它以使参数为“num”而不是硬编码。同样,对于任何数字 num,我如何断言一个是集合的一个元素。
【问题讨论】:
标签:
python
pytest
property-based-testing
python-hypothesis
【解决方案1】:
将divisors(-3) 更改为divisors(num)
@given(strategies.integers())
def test_valid(num):
with pytest.raises(ValueError):
divisors(num)
请记住,strategies.integers() 返回正数和负数,因此您需要将 max_value=0 传递给它以仅生成负数。
为了断言divisors func 返回set,将返回值分配给变量并使用isinstance。断言行可能类似于 assert isinstance(divisors(num), set)。
【解决方案2】:
尚无 cmets 学分,因此提供此作为答案。
要返回负数,应使用max_value=-1,因为 max_value 是一个包含边界,即如果设置为 0,则会对 0 进行采样。