如何在 python 中模拟 sys.platform 的值
How can I mock the value of sys.platform in python
我的目标是在我的单元测试中模拟 python 中 sys.platform 的值是 linux 而不是 win32。我发现有些人使用 mock.patch 但这并没有改变 sys.platform 的值用于 python 会话的其余执行。
有没有办法在 python 会话中永远模拟该值?
谢谢
解决方法:
我找到了解决这个问题的方法。问题是我在一个脚本中嘲笑 sys.platform 而在另一个脚本中我是来自 sys 的 importint 平台。这对 python 来说不是一回事,我得到了平台的另一个价值。
我解决这个问题的方法是将整个路径移动到平台:
module_1.submodule_1.platform = mock.MagicMock(return_value='whatever')
希望这就是您要找的东西,这是我能够模拟平台的方式(运行 在 Mac 上):
myfunc.py
import sys
# function that I am testing
def print_os():
if sys.platform == "win32":
return "We are Windows"
elif sys.platform == "darwin":
return "We are Darwin"
elif sys.platform == "linux":
return "We are Linux"
myfunc_test.py
import unittest
from unittest.mock import patch
import myfunc
@patch('sys.platform', 'linux')
class TestOS(unittest.TestCase):
def test_print_os(self):
self.assertEqual(myfunc.print_os(), "We are Linux")
if __name__ == '__main__':
unittest.main()
测试:
$ python -m unittest -v myfunc_test.py
test_print_os (main_test.TestOS) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
我的目标是在我的单元测试中模拟 python 中 sys.platform 的值是 linux 而不是 win32。我发现有些人使用 mock.patch 但这并没有改变 sys.platform 的值用于 python 会话的其余执行。
有没有办法在 python 会话中永远模拟该值?
谢谢
解决方法: 我找到了解决这个问题的方法。问题是我在一个脚本中嘲笑 sys.platform 而在另一个脚本中我是来自 sys 的 importint 平台。这对 python 来说不是一回事,我得到了平台的另一个价值。
我解决这个问题的方法是将整个路径移动到平台: module_1.submodule_1.platform = mock.MagicMock(return_value='whatever')
希望这就是您要找的东西,这是我能够模拟平台的方式(运行 在 Mac 上):
myfunc.py
import sys
# function that I am testing
def print_os():
if sys.platform == "win32":
return "We are Windows"
elif sys.platform == "darwin":
return "We are Darwin"
elif sys.platform == "linux":
return "We are Linux"
myfunc_test.py
import unittest
from unittest.mock import patch
import myfunc
@patch('sys.platform', 'linux')
class TestOS(unittest.TestCase):
def test_print_os(self):
self.assertEqual(myfunc.print_os(), "We are Linux")
if __name__ == '__main__':
unittest.main()
测试:
$ python -m unittest -v myfunc_test.py
test_print_os (main_test.TestOS) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK