Случайным образом выберите файл в папке, используя гипотезу - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу добавить тесты, используя библиотеку гипотез (уже используется в программном обеспечении для тестирования). Для этих тестов я должен использовать набор текстовых файлов, содержащихся в папке. Мне нужно случайным образом выбирать один из этих файлов каждый раз, когда я запускаю свои тесты. Как это сделать с помощью гипотезы?

edit Вот в принципе, как это выглядит, чтобы соответствовать шаблонам уже существующих тестов.

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

    # assert some stuff according to doc
    assert some_stuff

1 Ответ

1 голос
/ 17 февраля 2020

Stati c case

Если предполагается, что список файлов «заморожен» (файлы не будут удалены / добавлены), тогда мы можем использовать os.listdir + hypohtesis.strategies.sampled_from как

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

Dynami c case

Если содержимое каталога может измениться, и мы хотим выполнить сканирование каталога на каждом попытка генерации данных может быть сделана как

dynamic_txt_files_names = (strategies.builds(os.listdir,
                                             strategies.just(directory_path))
                           .map(sorted)
                           .flatmap(strategies.sampled_from))

или с полными путями

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

или с 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

...