Python 假设包:我可以确保使用某些值吗?
Python Hypothesis package: can I ensure that certain values are used?
问题陈述
下面是一个接近我正在尝试做的玩具示例。
@given(
idx_start=integers(min_value=0, max_value=100000),
idx_window=integers(min_value=0, max_value=100000),
)
def test_calc_max(conftest_df, idx_start, idx_window):
row_idxs = conftest_df.index[idx_start : (idx_start + idx_window)]
assert calc_max(conftest_df.loc[row_idxs, "my_column"]) >= 0
conftest_df
是我在我的 conftest.py
夹具文件中提供的数据框,它代表我用于我的包的真实数据的一部分。
这个数据框有很少 NaN
个值。我想使用 hypothesis
因为它很棒而且我坚信这是做事的正确方法。
但我还想确保测试中的方法和函数适用于 NaN。我真的不想只说 NaN
s,将来可能会出现其他内容(例如,使用逗号而不是句点来表示小数的数字)。
来自hypothesis
的理想解决方案
我宁愿能够做这样的事情:
@given(
idx_start=integers(min_value=0, max_value=100000, includes=[5, 4000, 80000]),
idx_window=integers(min_value=0, max_value=100000, includes=[20]),
)
.
.
.
并且有办法确保通过includes
参数考虑某些值。
我知道 hypothesis
会跟踪失败的值,但根据我的经验,它似乎并不能保证它们的使用。
有没有办法做我想做的事?
您可以使用 @example
装饰器来确保某些示例正在测试中。
这是来自 hypothesis's quick start guide 的示例:
from hypothesis import given, example
from hypothesis.strategies import text
@given(text())
@example('')
def test_decode_inverts_encode(s):
assert decode(encode(s)) == s
此处,@example('')
确保测试将运行以空字符串为例。
我还没有完全理解你的场景的细节,但也许你可以根据自己的需要调整这个例子。
问题陈述
下面是一个接近我正在尝试做的玩具示例。
@given(
idx_start=integers(min_value=0, max_value=100000),
idx_window=integers(min_value=0, max_value=100000),
)
def test_calc_max(conftest_df, idx_start, idx_window):
row_idxs = conftest_df.index[idx_start : (idx_start + idx_window)]
assert calc_max(conftest_df.loc[row_idxs, "my_column"]) >= 0
conftest_df
是我在我的 conftest.py
夹具文件中提供的数据框,它代表我用于我的包的真实数据的一部分。
这个数据框有很少 NaN
个值。我想使用 hypothesis
因为它很棒而且我坚信这是做事的正确方法。
但我还想确保测试中的方法和函数适用于 NaN。我真的不想只说 NaN
s,将来可能会出现其他内容(例如,使用逗号而不是句点来表示小数的数字)。
来自hypothesis
的理想解决方案
我宁愿能够做这样的事情:
@given(
idx_start=integers(min_value=0, max_value=100000, includes=[5, 4000, 80000]),
idx_window=integers(min_value=0, max_value=100000, includes=[20]),
)
.
.
.
并且有办法确保通过includes
参数考虑某些值。
我知道 hypothesis
会跟踪失败的值,但根据我的经验,它似乎并不能保证它们的使用。
有没有办法做我想做的事?
您可以使用 @example
装饰器来确保某些示例正在测试中。
这是来自 hypothesis's quick start guide 的示例:
from hypothesis import given, example
from hypothesis.strategies import text
@given(text())
@example('')
def test_decode_inverts_encode(s):
assert decode(encode(s)) == s
此处,@example('')
确保测试将运行以空字符串为例。
我还没有完全理解你的场景的细节,但也许你可以根据自己的需要调整这个例子。