python - 我应该如何调整类以适应 python 中的可测试性?
问题描述
我有一个类,它管理一些过程。
dataset_processor.py
class DatasetProcessor:
def __init__(path, list_element):
self.path = path
self.list_element = list_element
def do_check_dirs_under_paths():
"gets dirs from path and checks if elements are also in list_element"
但是现在,当涉及到dataset_processor.ut.py
我想在哪里进行单元测试并保持它独立时,我应该从路径中模拟目录(我应该吗?)。
def test_1(self):
test_1_processor = DatasetProcessor(path='M:/example', list_element=['foo', 'bar'])
test_1_processor.do_check_dirs_under_paths()
self.assertTrue(test_1_processor.everything_is_ok())
我在考虑:
- 制作另一个功能,例如。
def mock(dirs=[])
并在函数中使用特殊的模拟变量do_check_dirs_under_paths
并检查是否self.mock_dirs
. 它影响可读性,但易于实现。 - 为构建
test_params={}
参数do_check_dirs_under_paths
,我将在其中放置外部数据 - 它也会影响可读性。 - 不知何故,os.listdir、os.isdir 和函数在测试时操纵结果——我认为这将是最好的选择。
- 测试时间:实际上,制作那些目录。然而,由于这种方法以后可能不起作用(对于大文件等) - 我想保持一致并确保以后不会陷入更大的架构陷阱。
@编辑
为了更广阔的视野。DatasetProcessor 是一个更大的类,它管理维护图像数据集的其他子过程。它还检查文件的可读性并以我想要的格式从图像生成 NumPy 数组。
呈现的片段是我想要在单元测试下获得的片段之一。
解决方案
推荐阅读
- security - Web 应用程序在 URL 中显示用户登录凭据,开发人员推荐使用 SSL 证书。这安全吗?
- python - PyQt5:使用相同变量名下的按钮添加小部件后访问小部件
- python - Config.ini 无法读取或找不到
- sql - 如何使用 for 循环有效地编写大型多表 SELECT 语句?
- php - codeigniter 在 ajax 调用控制器时出现 404 错误
- react-native - 如何用玩笑正确地模拟反应导航?
- javascript - Javascript 上传 excel 文件 (XLS/XLSX)
- angular - 模板内的 ngOnInit()
- c++ - 是否可以将类的对象声明为同一类的成员变量?
- git - 使用 Github Actions 推送到带有访问令牌的 Gitlab