python - 如何使用 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
据我所知,代码运行良好,但我不知道如何正确测试它。我没有创建任何类,其余代码只是下载输入文件,然后将结果上传到服务器。
提前致谢!
解决方案
使用全局变量不利于测试。但是,当然,您总是可以使用mock和 mock 文件中的所有内容。但这表明您的代码有问题。
你的函数有太多副作用的问题。总是很难测试不将数据封装在内部并在其上下文之外更改所有内容的函数。
我不知道您的应用程序的上下文,但尝试将全局元素封装到一个类中。并尝试遵循 TDD 方法。开始编写测试首先定义接口。
推荐阅读
- javascript - 排序、切换和显示从对象数组生成的数组
- sql - 如何限制用户在 PowerBI 中查看某些数据过滤器?
- html - 将多件小件包裹在一件大件旁边
- excel - 当第一个事件重复发生时,是否可以运行多个准时事件?
- java - EasyMock - 由于父类私有对象(i18n)无法访问而引发 NullPointerexception
- go - 调试 gRPC 拨号中的连接问题
- php - PHP:可以将一个类中的属性值转移到另一个具有相同名称的类中的属性吗?
- azure-cognitive-search - Azure 商业搜索与 Azure 政府搜索之间的差异
- amazon-web-services - 如何建立 AWs Systems Manager PortForwarding 会话?未知会话类型端口
- mongodb - 在 protobuf java 中生成自定义 _id 以将其保存在 Mongodb 中