如何在 Python 中对变量重新分配进行单元测试
How to unit test variable reassignment in Python
主要问题:单元测试class变量(self.file_path
)是否被给定的方法成功重新分配的最有效方法是什么低于 class?
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()
之后是否不同,但该方法需要很长时间才能完成并且大大减慢了测试速度。
次要问题:有没有一种方法可以在不运行整个方法的情况下简单地检查一个方法是否重新分配了一个class变量?有没有更好的方法来解决这个问题?
我并不是说这是 最好的 解决方案,但它易于测试。它类似于模拟缓慢的操作,但更明确并使用其定义的接口测试函数,而不是对要模拟的内容做出特定于实现的假设。
与其对长而慢的操作进行硬编码,不如将其作为 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')
主要问题:单元测试class变量(self.file_path
)是否被给定的方法成功重新分配的最有效方法是什么低于 class?
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()
之后是否不同,但该方法需要很长时间才能完成并且大大减慢了测试速度。
次要问题:有没有一种方法可以在不运行整个方法的情况下简单地检查一个方法是否重新分配了一个class变量?有没有更好的方法来解决这个问题?
我并不是说这是 最好的 解决方案,但它易于测试。它类似于模拟缓慢的操作,但更明确并使用其定义的接口测试函数,而不是对要模拟的内容做出特定于实现的假设。
与其对长而慢的操作进行硬编码,不如将其作为 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')