关于python:unittest中的系统(“暂停”)

System (“pause”) in unittest

我有编译到.exe的python应用程序。在某些情况下,程序以sys.exit()终止,但为了不关闭控制台窗口,我使用下面的代码进行操作,这很好:

1
2
3
4
5
6
try:
    sys.exit()
except SystemExit:
    raise
finally:
    os.system("pause")

问题是,如果我的代码引发SystemExit,我需要测试,但是由于filnally块,测试无法通过——它们只是无限的。有没有可能让UnitTest通过os.system("pause")?我可以添加一个默认参数,这将防止暂停,但在我的例子中,它将是复杂的-如果有任何可能,我想在UnitTests中这样做。


我只会嘲笑江户十一〔0〕。甚至超过了EDOCX1[1]来断言它是否被调用。

1
2
3
4
5
6
7
8
9
10
11
12
# your_module.py
import sys
import os


def something():
    try:
        sys.exit()
    except SystemExit:
        raise
    finally:
        os.system("pause")

还有测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 and patch在python3的unittest.mock和python2的mock库中。