In my python code I check the type of one of the parameters to make sure it is of the type I expect. For instance:
def myfunction(dbConnection):if (type(dbConnection)<>bpgsql.Connection):r['error'] += ' invalid database connection'
I want to pass a mock connection for testing purposes. Is there a way to make the mock object pretend to be of the correct type?
With all due respect, It looks like you guys are not quite correct!
I can use duck typing as said, but there is a way to do what I intended to do in the first place:
from http://docs.python.org/dev/library/unittest.mock.html
Mock objects that use a class or an instance as a spec
or spec_set
are able to pass isintance tests:
>>>
>>> mock = Mock(spec=SomeClass)
>>> isinstance(mock, SomeClass)
True
>>> mock = Mock(spec_set=SomeClass())
>>> isinstance(mock, SomeClass)
True
so my example code would be like:
m = mock.MagicMock(spec=bpgsql.Connection)
isinstance(m, bpgsql.Connection)
this returns True
All that said, I am not arguing for strict type checking in python, I say if you need to check it you can do it and it works with testing and mocking too.