【发布时间】:2017-09-20 20:11:40
【问题描述】:
我正在尝试为工作中的一些代码创建一些单元测试。
代码接收一个对象,并根据该对象中的信息导入一个特定模块,然后创建它的一个实例。
我尝试编写的测试创建了对象,然后我检查它是否是我希望它导入的类的实例。问题是 isinstance 检查失败。
这是我的测试的样子。
import importlib
from path.to.imported_api import SomeApi
api = importlib.import_module("path.to.imported_api").create_instance() # create_instance() is a function that returns SomeApi().
assert isinstance(api, SomeApi) # This returns false, but I am not sure why.
【问题讨论】:
-
你说你在写单元测试。你嘲笑过什么吗?
-
在不知道
create_instance做什么的情况下,它可以返回任何东西。您可能需要包含type(api)和type(api) is SomeApi。也可能是您使用importlib两次导入模块,在这种情况下,它可能是同一个类,但由于重新加载,它不被认为是相同的。 -
-1 这个代码示例太简单了,无法实际重现任何内容。由于您在上面有
from path.to.imported_api import SomeApi,动态 importlib 行不会做任何事情,它只会使用位于sys.modules中的现有模块。 -
@wim 不一定,我遇到过一些奇怪的情况,
import_module确实再次加载了模块。不过我不记得是什么原因造成的了。 -
@MSeifert 是的,必须的。两次完全相同的路径:“path.to.imported_api”。
标签: python python-2.7 python-unittest