我已经编译成.exe的Python应用程序 在某些情况下,程序终止于sys.exit(),但是为了不关闭控制台窗口,我使用下面的代码进行操作,这很好用:
try:
sys.exit()
except SystemExit:
raise
finally:
os.system("pause")
问题是,我需要测试我的代码是否引发SystemExit,但是由于filnally阻塞,测试无法通过 - 它们只是无限的。
是否有可能让unittest通过os.system("pause")
?
我可以添加一个默认参数,这样可以防止暂停,但在我的情况下会很复杂 - 如果有可能我想在单元测试中这样做。
答案 0 :(得分:2)
我只想模仿os.system
。甚至超过sys.exit
以断言它是否被调用。
# your_module.py
import sys
import os
def something():
try:
sys.exit()
except SystemExit:
raise
finally:
os.system("pause")
和测试
import unittest
import your_module
try:
from unittest.mock import patch
except ImportError:
from mock import patch
class TestSysexit(unittest.TestCase):
@patch('your_module.os.system')
def test_system_exit(self, mock_os_system):
with self.assertRaises(SystemExit):
your_module.something()
mock_os_system.assert_called_once_with('pause')
if __name__ == '__main__':
unittest.main()
mock和patch在python3上的unittest.mock
和python2上的模拟库中。