我想使用 Hypothesis 库添加测试(已在软件中用于测试)。对于这些测试,我必须使用文件夹中包含的一组 txt 文件。每次运行测试时,我都需要随机选择其中一个文件。如何使用假设来做到这一点?
编辑 这里基本上看起来像,以符合现有测试的模板。
@given(doc=)
def mytest(doc):
# assert some stuff according to doc
assert some_stuff
我想使用 Hypothesis 库添加测试(已在软件中用于测试)。对于这些测试,我必须使用文件夹中包含的一组 txt 文件。每次运行测试时,我都需要随机选择其中一个文件。如何使用假设来做到这一点?
编辑 这里基本上看起来像,以符合现有测试的模板。
@given(doc=)
def mytest(doc):
# assert some stuff according to doc
assert some_stuff
如果文件列表被假定为“冻结”(不会删除/添加任何文件),那么我们可以使用os.listdir
+ hypohtesis.strategies.sampled_from
like
import os
from hypothesis import strategies
directory_path = 'path/to/directory/with/txt/files'
txt_files_names = strategies.sampled_from(sorted(os.listdir(directory_path)))
或者如果我们需要完整路径
from functools import partial
...
txt_files_paths = (strategies.sampled_from(sorted(os.listdir(directory_path)))
.map(partial(os.path.join, directory_path)))
或者如果目录可能有不同扩展名的文件,我们只需要.txt我们可以使用的文件glob.glob
import glob
...
txt_files_paths = strategies.sampled_from(sorted(glob.glob(os.path.join(directory_path, '*.txt'))))
If directory contents may change and we want to make directory scan on each data generation attempt it can be done like
dynamic_txt_files_names = (strategies.builds(os.listdir,
strategies.just(directory_path))
.map(sorted)
.flatmap(strategies.sampled_from))
or with full paths
dynamic_txt_files_paths = (strategies.builds(os.listdir,
strategies.just(directory_path))
.map(sorted)
.flatmap(strategies.sampled_from)
.map(partial(os.path.join, directory_path)))
or with glob.glob
dynamic_txt_files_paths = (strategies.builds(glob.glob,
strategies.just(os.path.join(
directory_path,
'*.txt')))
.map(sorted)
.flatmap(strategies.sampled_from))
sorted
following comment by @Zac Hatfield-Dodds.