python:测试子进程调用是否抛出预期异常

2 投票
1 回答
1549 浏览
提问于 2025-04-17 17:53

我正在尝试用python2.7的unittest模块测试调用一个没有参数的外部命令是否会抛出CalledProcessError异常,代码是这样的:

import unittest

class MyTest(unittest.TestCase)
    def testCommand(self):
        cmd = 'MyCommand'
        gotLog = 'UndefinedGot'
        with self.assertRaises(CalledProcessError) as context:
            gotLog = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT).strip()
        expectedLog = 'some error'
        self.assertEqual(context.exception.message, expectedLog)

但是,运行这个测试时我仍然得到了

Traceback (most recent call last):   File "MyTest.py", line 51, in testCommand
   gotLog = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT).strip()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 544, in check_output:
    raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command 'MyCommand' returned non-zero exit status 2

难道unittest的异常测试无法处理外部命令吗?比如说,异常在其他地方被拦截了?

谢谢!

1 个回答

2

我只能想到,CalledProcessError这个名字可能被搞混了,也许明确说明一下会更有帮助。

with self.assertRaises(subprocess.CalledProcessError) as context:

撰写回答