首页 > 解决方案 > 如何使用 pytest 测试状态机?

问题描述

我是测试新手,我需要找到一种方法来测试我编写的状态机,类似于使用 pytest的https://code.activestate.com/recipes/577308-simple-state-machine-implementation/ 。

该代码将时间序列字典作为输入 {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

据我所知,代码运行良好,但我不知道如何正确测试它。我没有创建任何类,其余代码只是下载输入文件,然后将结果上传到服务器。

提前致谢!

标签: pythonpytestfsm

解决方案


使用全局变量不利于测试。但是,当然,您总是可以使用mock和 mock 文件中的所有内容。但这表明您的代码有问题。

你的函数有太多副作用的问题。总是很难测试不将数据封装在内部并在其上下文之外更改所有内容的函数。

我不知道您的应用程序的上下文,但尝试将全局元素封装到一个类中。并尝试遵循 TDD 方法。开始编写测试首先定义接口。


推荐阅读