Могу ли я подделывать / издеваться над типом моих макетных объектов в python unittests

В моем коде python я проверяю тип одного из параметров, чтобы убедиться, что он относится к типу, который я ожидаю. Например:

def myfunction(dbConnection): if (type(dbConnection)<>bpgsql.Connection): r['error'] += ' invalid database connection' 

Я хочу передать фиктивное соединение для тестирования. Есть ли способ сделать издевательский объект претендовать на правильный тип?

При всем уважении. Похоже, вы, ребята, не совсем правы!

Я могу использовать утиную печать, как сказано, но есть способ сделать то, что я намеревался сделать в первую очередь:

от http://docs.python.org/dev/library/unittest.mock.html

Макет объектов, которые используют класс или экземпляр как spec или spec_set, могут передавать тесты isintance:

 >>> >>> mock = Mock(spec=SomeClass) >>> isinstance(mock, SomeClass) True >>> mock = Mock(spec_set=SomeClass()) >>> isinstance(mock, SomeClass) True 

поэтому мой примерный код будет выглядеть так:

 m = mock.MagicMock(spec=bpgsql.Connection) isinstance(m, bpgsql.Connection) 

это возвращает True

Все, что сказал, я не спорю о строгой проверке типов в python, я говорю, если вам нужно проверить это, вы можете это сделать, и это работает с тестированием и насмешкой.

Это более или менее точно, почему вы не должны применять строгую проверку typecheck! Вы должны полностью удалить эту строку из кода.

Если вы не хотите этого делать, напишите абстрактный базовый класс со свойствами, которые вы хотите иметь ( .connect() , .cursor() , …?) И проверьте isinstance этого.

Также <> устарел для aaages. Используйте != .