【发布时间】:2012-07-02 04:50:53
【问题描述】:
在我的 python 代码中,我检查其中一个参数的类型以确保它是我期望的类型。例如:
def myfunction(dbConnection):
if (type(dbConnection)<>bpgsql.Connection):
r['error'] += ' invalid database connection'
我想传递一个模拟连接以进行测试。有没有办法让模拟对象伪装成正确的类型?
【问题讨论】:
-
使用duck typing 而不是依赖确切的类名。
-
所以基本上答案是否定的,你不能伪造你的类型,而是不要直接检查类型,看看它是否像鸭子一样走路,如果是那么它就足够了,对吧?
-
@Ali
isinstance(x, Foo)如果x是Foo,则返回true,包括如果x是Foo的子类的实例。 -
没错。你不应该直接比较类型。这不仅会阻止像这样的测试,而且如果相同的模块被导入两次导致相同类型的不同类定义比较不相等,则会导致问题。 也已弃用,请使用 !=.
-
@Martijn,它会出现在旧版本的 IDLE 中。这是我曾经真正发生过的事情。
标签: python unit-testing mocking