如何使用abc抽象基类作为模拟规范?

Cirdec

我有一个抽象基类:

import abc
import six

@six.add_metaclass(abc.ABCMeta)
class A(object):

    @abc.abstractmethod
    def f(self, arg1):
        pass

我想使用此类作为模拟的规范。

import mock
mock_a = mock.Mock(spec=A)

这部分起作用。例如,mock_a.x结果为AttribureError("Mock object has no attribute 'x')但是mock_a.f,并未基于的抽象方法进行说明A.f无论传递给的参数数量如何,它都会返回一个模拟f

mock_a = mock.Mock(spec=A)

# Succeeds
print mock_a.f(1)

# Should fail, but returns a mock
print mock_a.f(1,2)

# Correctly fails
print mock_a.x

模拟可以创建speced一个模拟A.fcreate_autospec...

f_spec = mock.create_autospec(A.f)

# Succeeds
f_spec(mock_a, 1)

# Correctly fails
f_spec(mock_a, 1, 2)

...但是对于A的属性却不这样做

如何创建可以准确实现抽象基类的模拟?

里昂

申请mock.create_autospec()上课:

>>> mock_a = mock.create_autospec(spec=A)
>>>
>>> # Should succeed
>>> print mock_a.f(1)
<MagicMock name='mock.f()' id='140401932347984'>
>>>
>>> # Should fail
>>> print mock_a.f(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/mock/mock.py", line 1061, in __call__
    _mock_self._mock_check_sig(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mock/mock.py", line 227, in checksig
    sig.bind(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mock/mock.py", line 95, in fixedbind
    return self._bind(args, kwargs)
  File "/usr/lib/python2.7/dist-packages/funcsigs/__init__.py", line 712, in _bind
    raise TypeError('too many positional arguments')
TypeError: too many positional arguments
>>>
>>> # Should fail
>>> print mock_a.x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/mock/mock.py", line 716, in __getattr__
    raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute 'x'
>>> 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何使用EasyMock模拟从抽象类继承的方法?

从抽象基类返回规范表示子类是否可以接受?

如何使用项目列表(继承自抽象类)作为其抽象类?

您如何使用Moq模拟包含内部抽象方法的抽象类?

使用密封特性和密封抽象类作为基类的区别

如何在Python中使用抽象基类实现字典?

如何将abc.abstractproperty与类方法结合使用以构成“抽象类属性”?

抽象基类与混凝土类作为超类型

我可以使用抽象基类作为 Unity Editor 元素吗?

在基类构造函数中使用抽象类作为参数,以在派生类中具有更多特定类型

使用抽象类作为函数参数

如何使用Mockito将模拟注入到抽象父类的@Autowired字段中

使用抽象基类重载方法

使用抽象覆盖并调用基类

如何使用从基类继承的事件在抽象类中定义EventHandler?

Python抽象基类:为什么abc不阻止实例化?

如何使用Scala模拟来模拟类

如何使用模板类型作为函数参数派生抽象模板类(C ++ 11)

如何使用静态抽象类作为Java中的回调?

如何使用抽象类作为每个循环的索引变量的类型?

如何模拟从抽象类继承的受保护子类方法?

如何模拟抽象类继承的受保护方法

如何模拟抽象类并调用其构造函数?

如何使用IEnumerable模拟类

特定基类的抽象类的C ++ Vector,作为另一个类成员

抽象基类

抽象基类定义

如何使用可处理整数或字符串值的泛型创建抽象基类?

使用抽象基类C ++中的变量派生的类