Как проверить конечный автомат с помощью pytest?
Я новичок в тестировании, и мне нужно найти способ тестирования конечного автомата, который я написал, похожий на этот https://code.activestate.com/recipes/577308-simple-state-machine-implementation/ с использованием pytest.
Код принимает словарь временных рядов в качестве входных данных {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 ответ
Использование глобальных переменных не подходит для тестирования. Но, конечно, вы всегда можете использовать макет и макетировать все в файле. Но это показатель того, что что-то не так с вашим кодом.
Проблема вашей функции, имеющей слишком много побочных эффектов. Всегда сложно тестировать функции, которые не инкапсулируют данные внутри и изменяют все вне их контекста.
Я не знаю контекст вашего приложения, но попробуйте инкапсулировать глобальные элементы в класс. И попробуйте следовать методологии TDD. Начните писать тесты, сначала определяя интерфейсы.