我正在使用unittest.mock.sentinel
为测试函数提供哑数值,然后断言调用。
我希望能够指定哨兵的类型,以便其通过方法中的类型检查。
MWE:
import collections
from unittest.mock import sentinel
def fun(x):
if not isinstance(x, collections.Iterable):
raise TypeError('x should be iterable')
pass
def test_fun_pass_if_x_is_instance_iterable():
# this does not work and raise because sentinel is not iterable
assert fun(sentinel.x) is None
我尝试做sentinel.x = collections.Iterable()
,但收到错误消息:
TypeError: Can't instantiate abstract class Iterable with abstract methods __iter__
例如,到目前为止我可以做sentinel.x = tuple()
或sentinel.x = list()
,但这是可迭代的特殊情况
答案 0 :(得分:0)
我认为这里的问题是collections.Iterable
是一个抽象基类(ABC),不能直接实例化。这就是错误消息的含义,方法__iter__
是抽象的,没有主体。您必须使用派生类或自己编写一个类。