首页 > 解决方案 > 如何在 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(),但是该方法需要很长时间才能完成并且大大减慢了测试速度。

次要问题:有没有办法简单地检查一个方法是否重新分配了一个类变量而不运行整个方法?有没有更好的方法来解决这个问题?

标签: pythonpython-2.7unit-testingtestingpython-unittest

解决方案


我并不是说这是最好的解决方案,但它对测试很友好。它类似于模拟慢速操作,但更明确并使用其定义的接口测试函数,而不是对要模拟的内容做出特定于实现的假设。

与其对漫长而缓慢的操作进行硬编码,不如将其作为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')

推荐阅读