【问题标题】:How to unit test variable reassignment in Python如何在 Python 中对变量重新分配进行单元测试
【发布时间】:2018-09-13 15:47:10
【问题描述】:

主要问题:单元测试类变量 (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)

我最初尝试在运行reassign_path() 后测试self.file_path 变量是否不同,但该方法需要很长时间才能完成并且大大减慢了测试速度。

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

【问题讨论】:

  • 理论上,您可以使用内置的 ast 模块分析代码的抽象语法树来检查这一点。这不会使您的任何代码运行。
  • 你可以模拟长操作
  • @JETM - 你能详细说明我如何模拟长时间操作吗?抱歉,我对模拟和单元测试还很陌生。
  • @chepner 的回答比我说的好。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2019-09-27
    • 2019-11-25
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多