如何使用pytest测试状态机?

时间:2019-01-31 09:13:26

标签: python pytest fsm

我是测试的新手,我需要找到一种方法来测试我编写的状态机,类似于使用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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

使用全局变量不利于测试。但是,当然,您始终可以使用mock并模拟文件中的所有内容。但这表明您的代码不正确。

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

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