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

标签 python unit-testing exception subprocess

我正在尝试使用 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

单元测试的异常测试是否无法处理外部命令,例如异常在其他地方被拦截?

谢谢!

最佳答案

我只能认为CalledProcessError名称已被践踏,也许明确说明它会有所帮助

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

关于python:测试子进程调用是否抛出预期异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15206491/

相关文章:

python - 多个 pandas 子图的一个颜色条

python - 禁用 TextInput 中的文本换行

python - Scrapy 多个 url 的问题

java - 使用 Guice 进行模拟并拥有用于测试目的的真实对象

unit-testing - 使用自定义属性编辑器时如何对 Grails Controller 进行单元测试?

java - 使用 EasyMock 在异常后执行断言

exception - 在Zend Application中的error.log文件中捕获错误和异常的最佳方法是什么?

python - 为什么模式总是1?

unit-testing - 我应该更改单元测试的命名约定吗?

python - python 3.5 中的回溯