Assert вызывается с аргументом определенного типа - PullRequest
1 голос
/ 28 мая 2019

Я хочу проверить в своем тесте, вызывается ли функция с аргументом определенного класса.

class Foo:
... 

Я нашел насмешку. Я не могу пройти ни одного занятия. Что нужно, это:

test_mock.assert_called_with("expected string", ANY(spec=Foo))

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

Я решил это с помощью специального сопоставителя.

class TypeMatcher:

def __init__(self, expected_type):
    self.expected_type = expected_type

def __eq__(self, other):
    return isinstance(other, self.expected_type)

А затем проверьте это так:

test_mock.assert_called_with("expected string", TypeMatcher(Foo))
0 голосов
/ 28 мая 2019

Используйте другой тест. Атрибут call_args содержит аргументы, переданные в вызов; Вы можете извлечь нужный аргумент, а затем проверить его тип.

# E.g. test_mock(1,"foo", bar=9) gives 
# test_mock.call_args == ((1, "foo"), {"bar": 9})
assert isinstance(test_mock.call_args[1][1], Foo)
0 голосов
/ 28 мая 2019

Вы можете проверить по имени класса, используя имя класса:

class MyClass(object):
    def __init__(self, x):
        self.x = x

a = MyClass(3)
print(a.__class__.__name__)
if a.__class__.__name__ == "MyClass":
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...