如何在 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')