是否可以测试使用`os._exit()`的函数?

时间:2017-07-19 08:29:43

标签: python unit-testing python-unittest nose

我想测试一个函数在失败时执行os._exit(2)。我见过sys.exit()使用SystemExit的许多解决方案。我已阅读Python3Python2文档,似乎os._exit()没有使用SystemExit

尽管如此,我已经尝试this,以防它对我这边的文档产生误解,但它只是退出测试,甚至不是测试失败:

make: *** [test] Error 2

这可能是由于函数调用os._exit(2)

2 个答案:

答案 0 :(得分:2)

os.system()返回值包含高8位的退出代码,因此您可以通过以下方式检查外部脚本的退出代码:

import os

assert os.system('python script.py') >> 8 == 2

您还可以使用os._exit()模拟sys.exit()

import os, sys
import script

os._exit = sys.exit
script.tested_method()  # raises SystemExit

答案 1 :(得分:1)

unittest.mock.MagicMock对象可以很容易地简单地检查函数是否被调用而不需要它们执行默认行为。

from unittest import mock
import os

def funcToTest():
    os.exit(2)

def test_func():
    os._exit = mock.MagicMock()
    funcToTest()
    assert os._exit.called