0

我想使用 Hypothesis 库添加测试(已在软件中用于测试)。对于这些测试,我必须使用文件夹中包含的一组 txt 文件。每次运行测试时,我都需要随机选择其中一个文件。如何使用假设来做到这一点?

编辑 这里基本上看起来像,以符合现有测试的模板。

@given(doc=)
def mytest(doc):

    # assert some stuff according to doc
    assert some_stuff
4

1 回答 1

1

静态案例

如果文件列表被假定为“冻结”(不会删除/添加任何文件),那么我们可以使用os.listdir+ hypohtesis.strategies.sampled_fromlike

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))

Edit

于 2020-02-17T12:31:33.527 回答