Python-单元测试Super()调用

python - unittesting super() calls(Python-单元测试Super()调用)
本文介绍了Python-单元测试Super()调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

class A(object):

    def get_value(self):
        return "foo"


class B(A):

    def get_value(self):
        value = super(B, self).get_value()
        value + "bar"
        return value

给定上述类,当我想要为B()类编写一个测试套件时,我应该如何模拟super()A()get_value()方法的调用?我想要的伪代码是:

class BTestCase(TestCase):

    def setUp(self):
        self.b = B()

    def test_get_value(self):
        # This won't work, attribute error- "super" object has
        # no attribute get_value
        super(B, self.b).get_value = Mock()
        super(B, self.b).get_value.assert_called_once_with()

但显然这是行不通的。但我想知道是否有一种方法来测试呼叫,打补丁是不是可行。

推荐答案

来自文档(http://docs.python.org/2/library/functions.html#super)

super(type[, object-or-type])
委托方法调用的代理对象返回给类型的父类或兄弟类。这对于访问类中已重写的继承方法很有用。搜索顺序与getattr()使用的相同,只是跳过了类型本身。 <;...>

Super有两个典型的用例。

  • 在具有单继承的类层次结构中,Super可以用来引用父类,而无需显式命名它们,从而使代码更具可维护性。<;...>

  • 第二个用例是支持动态执行环境中的协作多重继承。<;...>

__

换句话说,super是用于获取方法和属性的类,不是用于设置方法和属性的类。

如果您想要修补某个东西,请直接使用实例或类:

class A(object): ...
class B(A): ...
b = B()

super(B, b).get_value = Something()  # no
b.get_value = Something()  # ok
B.get_value = Something()  # ok
A.get_value = Something()  # ok

这篇关于Python-单元测试Super()调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)