假设装饰器,用于从类型提示中推断出所有策略
hypothesis decorator for inferring all strategies from type hints
Python 模块假设有一个 hypothesis.given
装饰器,它允许为各个参数传递 hypothesis.infer
以从相应的类型提示中导出它们的策略。这可能很乏味,因为必须重复所有参数。这是一个例子:
@given(arg1=infer, arg2=infer, arg3=infer)
def test_something(arg1: int, arg2: bytes, arg3: List[float]) -> None:
...
文档建议 infer
is not used by default to retain backwards compatibility。 hypothesis 是否已经包含一个装饰器 given_everything_inferred
,它简单地假设所有参数为 infer
,或者是否容易编写一个?预期用法示例:
@given_everything_inferred
def test_something(arg1: int, arg2: bytes, arg3: List[float]) -> None:
...
默认情况下我们不提供此功能,因为它会干扰 Pytest fixtures 之类的东西,并且过渡到自定义策略(例如,仅正整数)现在需要您更改整个装饰器而不是单个参数。
不过,编写自己的代码非常容易:
def given_everything_inferred(func):
return given(**{n: infer for n in inspect.getfullargspec(func).args})(func)
处理仅关键字参数,或编写允许您传递一些策略并推断其余部分的版本,是 reader (or sponsorship) 的练习。
有一个单独的包可以执行此操作:hypothesis-auto。基本上就是hypothesis_auto.auto_test
。它单独集成到 pytest 中。 link 有示例使用。
Python 模块假设有一个 hypothesis.given
装饰器,它允许为各个参数传递 hypothesis.infer
以从相应的类型提示中导出它们的策略。这可能很乏味,因为必须重复所有参数。这是一个例子:
@given(arg1=infer, arg2=infer, arg3=infer)
def test_something(arg1: int, arg2: bytes, arg3: List[float]) -> None:
...
文档建议 infer
is not used by default to retain backwards compatibility。 hypothesis 是否已经包含一个装饰器 given_everything_inferred
,它简单地假设所有参数为 infer
,或者是否容易编写一个?预期用法示例:
@given_everything_inferred
def test_something(arg1: int, arg2: bytes, arg3: List[float]) -> None:
...
默认情况下我们不提供此功能,因为它会干扰 Pytest fixtures 之类的东西,并且过渡到自定义策略(例如,仅正整数)现在需要您更改整个装饰器而不是单个参数。
不过,编写自己的代码非常容易:
def given_everything_inferred(func):
return given(**{n: infer for n in inspect.getfullargspec(func).args})(func)
处理仅关键字参数,或编写允许您传递一些策略并推断其余部分的版本,是 reader (or sponsorship) 的练习。
有一个单独的包可以执行此操作:hypothesis-auto。基本上就是hypothesis_auto.auto_test
。它单独集成到 pytest 中。 link 有示例使用。