如何在Python中对变量的重新分配进行单元测试

时间:2018-09-13 15:47:10

标签: python python-2.7 unit-testing testing python-unittest

主要问题:对提供给以下类的方法成功地重新分配类变量(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()变量是否不同,但是该方法需要很长时间才能完成,并且大大降低了测试速度。

次要问题:是否可以简单地检查方法是否在不运行整个方法的情况下重新分配了类变量?有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

我并没有声称这是最好的解决方案,但它易于测试。这类似于模拟慢速操作,但更为明确,并使用其定义的接口测试功能,而不是对模拟内容进行特定于实现的假设。

不要硬编码长时间的慢速操作,而应将其作为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')