单元测试中的系统("暂停")

时间:2016-01-20 07:00:24

标签: python python-2.7 unit-testing

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

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

问题是,我需要测试我的代码是否引发SystemExit,但是由于filnally阻塞,测试无法通过 - 它们只是无限的。
是否有可能让unittest通过os.system("pause")
我可以添加一个默认参数,这样可以防止暂停,但在我的情况下会很复杂 - 如果有可能我想在单元测试中这样做。

1 个答案:

答案 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上的模拟库中。