python - 如何在 Python 中对变量重新分配进行单元测试
问题描述
主要问题self.file_path
:单元测试类变量( )是否被给定以下类的方法成功重新分配的最有效方法是什么?
class FileHandler(object):
def __init__(self, file_path):
self.file_path = file_path # /original/path/file.csv
def reassign_path(new_path):
self.file_path = new_path # /new/path/file.csv
self.run_long_operation(self.file_path)
我最初尝试self.file_path
在运行 后测试变量是否不同reassign_path()
,但是该方法需要很长时间才能完成并且大大减慢了测试速度。
次要问题:有没有办法简单地检查一个方法是否重新分配了一个类变量而不运行整个方法?有没有更好的方法来解决这个问题?
解决方案
我并不是说这是最好的解决方案,但它对测试很友好。它类似于模拟慢速操作,但更明确并使用其定义的接口测试函数,而不是对要模拟的内容做出特定于实现的假设。
与其对漫长而缓慢的操作进行硬编码,不如将其作为reassign_path
.
class FileHandler(object):
def __init__(self, file_path):
self.file_path = file_path
def reassign_path(self, new_path, f=FileHandler.run_long_operation):
self.file_path = new_path
f(self, self.file_path)
现在,您可以reassign_path
通过传递另一个更快的函数作为第二个参数来快速测试:
def test_reassign_path_quickly(self):
fh = FileHandler('/old/path')
fh.reassign_path('/new/path', lambda *args: None)
self.assertEquals(fh.file_path, '/new/path')
推荐阅读
- typescript - 打字稿:将一种类型分配给许多变量
- validation - 使用 FOR ALL ENTRIES 验证多行
- javascript - JS exercise issue + loop + arrays + objects
- c++ - Convert unsigned char* to QString and vice versa
- android - Null object in android test
- json - 不能将 *ngFor 用于 Angular 中的二维数组
- json - How to add form-data as JMETER body
- javascript - 向所有具有其他角色的成员添加角色?
- python - 如何在python中安装win32api模块?
- angular - Angular 8:等待上一页的数据加载然后填充当前页面上的字段