Как мне адаптировать класс для тестируемости в python? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть класс, который управляет некоторым процессом.

dataset_processor.py

class DatasetProcessor:
    def __init__(path, list_element):
        self.path = path
        self.list_element = list_element

    def do_check_dirs_under_paths():
        "gets dirs from path and checks if elements are also in list_element"

Но теперь, когда дело доходит до dataset_processor.ut.py, где я хочу сделать модульные тесты и оставив его независимым, я должен издеваться над директориями (не так ли?).

    def test_1(self):
        test_1_processor = DatasetProcessor(path='M:/example', list_element=['foo', 'bar'])
        test_1_processor.do_check_dirs_under_paths()
        self.assertTrue(test_1_processor.everything_is_ok())

Я думал:

  1. Создание другой функции, например. def mock(dirs=[]) и используйте специальные фиктивные переменные в функции do_check_dirs_under_paths и проверьте, если self.mock_dirs. Он влияет на читабельность, но его легко реализовать.
  2. Построить test_params={} аргумент для do_check_dirs_under_paths, куда я бы поместил внешние данные - это также влияет на читабельность.
  3. Каким-то образом shadow os.listdir, os .isdir и функции на время тестов для манипулирования результатами - я думаю, что это был бы лучший вариант.
  4. На время тестирования: собственно, создайте эти каталоги. Тем не менее, поскольку этот подход может не сработать позже (для больших файлов и т. Д. c.) - я хотел быть последовательным и уверен, что не попаду в большую ловушку архитектуры позже.

@ edit

Для более широкой перспективы. DatasetProcessor - это больший класс, который управляет другими подпроцессами поддержки набора данных изображений. Он также проверяет читаемость файлов и генерирует массив NumPy из изображений в нужном мне формате.

Представленный фрагмент является одним из тех, которые я хочу получить в модульных тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...