我希望对以下内容进行单元测试:
import sys
if sys.platform == "darwin":
import OSX.Leap as Leap
elif 'linux' in sys.platform:
import Linux.Leap as Leap
如果我在测试中导入了OSX.Leap或Linux.Leap,如何确定?换句话说,我如何知道我已将哪个版本的Leap类添加到模块中?
更新
如果我使用inspect
我可以获得:
<module 'Linux.params' from 'Linux/params.pyc'>
有:
inspect.getmodule(Leap)
答案 0 :(得分:1)
您可以使用__name__
属性
>>> import cStringIO as c
>>> c.__name__
'cStringIO'
>>> import StringIO as c
>>> c.__name__
'StringIO'
对于你的情况:
if 'Linux' in module_to_test.Leap.__name__:
# Linux ...
替代方案是使用__file__
属性。但它不适用于某些模块(例如C扩展模块)
更新根据OP的评论,Leap
不是模块,而是模块内的类/类型。
您可以使用类的__module__
属性访问模块名称。
Leap.__module__
或者,正如您在更新的问题中所做的那样,使用inspect.getmodule
获取模块:
inspect.getmodule(Leap).__name__
inspect.getmodule(Leap).__file__
答案 1 :(得分:1)
Leap.__name__
中提供了导入的模块的名称。标准库中的一个示例:
>>> import os.path
>>> os.path.__name__
'posixpath'
os.path
模块类似,因为它是一个包装器,用于导入特定于平台的模块以实现通用API。
但是,如果Linux.Leap
和OSX.Leap
的{{1}}属性值相同,则会出现问题。在这种情况下,您只需再次检查__name__
的值,以了解导入了哪个模块。