Hypothesis
初识
Hypothesis是一个Python库,用于创建单元测试,该单元测试编写起来更简单,运行时功能更强大,可以在您不需要的代码中查找极端情况。它稳定,强大且易于添加到任何现有测试套件中。
它的工作原理是让您编写断言每种情况都应该正确的测试,而不仅仅是您偶然想到的那些。
它通过生成与您的规范匹配的任意数据并检查在这种情况下您的保证仍然有效来工作。如果找到了一个没有的示例,它将采用该示例并将其缩减为一定尺寸,然后对其进行简化,直到找到一个仍然会导致问题的更小的示例。然后将其保存到以后的示例中,以便一旦发现您的代码有问题,将来就不会忘记它。
安装
pip install hypothesis
如果要直接从源代码安装(例如,因为要进行更改并安装更改的版本),请查看CONTRIBUTING.rst中的说明
运行测试
f __name__ == "__main__":
test_decode_inverts_encode()
还能这样用
import unittest
class TestEncoding(unittest.TestCase):
@given(text())
def test_decode_inverts_encode(self, s):
self.assertEqual(decode(encode(s)), s)
if __name__ == "__main__":
unittest.main()
编写测试
from hypothesis import given
import hypothesis.strategies as st
@given(st.integers(), st.integers())
def test_ints_are_commutative(x, y):
assert x + y == y + x
@given(x=st.integers(), y=st.integers())
def test_ints_cancel(x, y):
assert (x + y) - y == x
@given(st.lists(st.integers()))
def test_reversing_twice_gives_same_list(xs):
# This will generate lists of arbitrary length (usually between 0 and
# 100 elements) whose elements are integers.
ys = list(xs)
ys.reverse()
ys.reverse()
assert xs == ys
@given(st.tuples(st.booleans(), st.text()))
def test_look_tuples_work_too(t):
# A tuple is generated as the one you provided, with the corresponding
# types in those positions.
assert len(t) == 2
assert isinstance(t[0], bool)
assert isinstance(t[1], str)