Как проверить конечный автомат с помощью pytest? - PullRequest
0 голосов
/ 31 января 2019

Я новичок в тестировании, и мне нужно найти способ проверить конечный автомат, который я написал, аналогично этому https://code.activestate.com/recipes/577308-simple-state-machine-implementation/ с использованием pytest.

Код принимает словарь временных рядов какinput {timestamp: value}, затем создает новый словарь {timestamp: string}.

Вот пример одной из функций, которые определяют изменение состояния:

def state_t_high():
    global current_element, duration_timer, recovery_timer, output_series
    # print("T_HIGH")
    if current_element == number_of_elements:
        return state_done
    elif input_series[inputList[current_element]] < THRESHOLD:
        current_element += 1
        return state_normal
    elif input_series[inputList[current_element]] >= THRESHOLD and duration_timer <= TRIGGER_DUR:
        duration_timer += 1
        current_element += 1
        return state_t_high
    elif input_series[inputList[current_element]] >= THRESHOLD and duration_timer > TRIGGER_DUR:
        duration_timer += 1
        output_series[inputList[current_element]] = 'too high'
        current_element += 1
        return state_p_high

Насколькокак я могу сказать, код работает нормально, однако я не знаю, как на самом деле правильно его протестировать.Я не создал никаких классов, остальная часть кода просто загружает входной файл и затем загружает результат на сервер.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Использование глобальных переменных не подходит для тестирования.Но, конечно же, вы всегда можете использовать mock и макетировать все в файле.Но это показатель того, что с вашим кодом что-то не так.

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

Я не знаю контекст вашего приложения, но пытаюсь инкапсулировать глобальные элементы в класс.И попробуйте следовать методологии TDD.Начните писать тесты, сначала определяя интерфейсы.

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