给python一个“;平台“;图书馆假平台信息?
在脚本开始时,我使用给python一个“;平台“;图书馆假平台信息?,python,cross-platform,Python,Cross Platform,在脚本开始时,我使用platform.system和platform.release来确定脚本运行在哪个操作系统和版本上(因此它知道它的数据在Mac上的应用程序支持中,在类unix和非Mac unix上的home中,在windows=Vista上的appdata中)。我想测试我的ifs、elifs和elses系列,它们决定了操作系统和版本,但我只能访问Mac 10.6.7、一些未知的Linux版本和Windows 7。有没有一种方法可以提供平台假系统和发布信息,这样我就可以确保XP、Solari
platform.system
和platform.release
来确定脚本运行在哪个操作系统和版本上(因此它知道它的数据在Mac上的应用程序支持中,在类unix和非Mac unix上的home中,在windows=Vista上的appdata中)。我想测试我的if
s、elif
s和else
s系列,它们决定了操作系统和版本,但我只能访问Mac 10.6.7、一些未知的Linux版本和Windows 7。有没有一种方法可以提供平台
假系统和发布信息,这样我就可以确保XP、Solaris等可以在没有安装的情况下正确处理脚本?您可能想探索平台
进行测试。或者,您可以直接使用monkey patchplatform
,或者甚至直接使用sys.modules
来覆盖默认的platform
模块,但是mock已经设计成自包含的,并且还可以在代码中非常清楚地显示什么是测试工具,什么不是测试工具,这样,您就不会意外地在生产代码中发布测试功能。您可以创建初始化函数,将这些变量作为参数,以便在测试中很容易欺骗它们
>>> platform.system = lambda: "whatever"
>>> platform.system()
'whatever'
对我来说,用pytest mock直接修补
platform.system
不起作用。不过,一个简单的技巧是在您自己的实用程序函数中抽象此信息的检索(这次您可以使用pytest-mock成功地对其进行修补)
因此,在您的实现模块/类中:
def _get_system() -> str:
return platform.system().lower()
def _is_windows() -> bool:
return _get_system() == 'windows'
在您的测试中,这里使用pytest+pytest mock:
def test_win_no_pad_code():
with patch('module_name._get_system', MagicMock(return_value='windows')):
assert module_name._is_windows()
这是使用模块的一种方法,但您可以使用类来替代。我忘了提到我不想虚拟化。好的。是否有地方可以看到给定操作系统的系统/版本信息?Windows 7的版本是“7”,但雪豹的版本是“达尔文内核版本10.7.0:Sat Jan 29 15:17:16 PST 2011;root:xnu-1504.9.37~1/release386”