Как указать тип unittest.mock.sentinel? - PullRequest
0 голосов
/ 12 ноября 2018

Я использую 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

EDIT

Я пытался сделать sentinel.x = collections.Iterable(), но получил ошибку:

TypeError: Can't instantiate abstract class Iterable with abstract methods __iter__

Пока я могу, например, sentinel.x = tuple() или sentinel.x = list(), но это особый случай итерируемого

1 Ответ

0 голосов
/ 18 апреля 2019

Я думаю, что проблема в том, что collections.Iterable является абстрактным базовым классом (ABC) и не может быть создан непосредственно.Вот что говорится в сообщении об ошибке: метод __iter__ абстрактный, без тела.Вы должны использовать производный класс или написать его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...