未捕获Python模拟异常

未捕获Python模拟异常,python,unit-testing,mocking,Python,Unit Testing,Mocking,努力在标题中简洁地描述这一点 我想测试一个模块: mod.py: 以及测试模块test_mod.py: 然后运行python test\u mod.py,我看到以下输出: <NonCallableMagicMock name='subprocess' spec='module' id='140654009377872'> . ---------------------------------------------------------------------- Ran 1 tes

努力在标题中简洁地描述这一点

我想测试一个模块:

mod.py:

以及测试模块test_mod.py:

然后运行
python test\u mod.py
,我看到以下输出:

<NonCallableMagicMock name='subprocess' spec='module' id='140654009377872'>
.
----------------------------------------------------------------------
Ran 1 test in 0.007s

OK

.
----------------------------------------------------------------------
在0.007s内运行1次测试
好啊

我很高兴subprocess对象被模拟了,但是为什么没有执行
print“catched exception”
语句呢?我猜这是因为真正的异常被抛出
test_mod.subprocess.CalledProcessException
而不是
subprocess.CalledProcessException
,但我不确定如何解决这个问题。有什么建议吗?谢谢你的时间。

我终于解决了这个问题

问题是我在模拟整个子流程模块,其中包括
CalledProcessError
异常!这就是为什么它似乎与我在测试模块中提出的异常不匹配,因为它是一个完全不同的对象

修复方法是只模拟
子流程。检查输出,哦

import unittest
import mock
from mod import MyStuff
import subprocess

class Tests(unittest.TestCase):
    def setUp(self):
        self.patched_subprocess = mock.patch(
            'mod.subprocess', autospec=True)
        self.mock_subprocess = self.patched_subprocess.start()
        self.my_stuff = MyStuff()

    def tearDown(self):
        self.patched_subprocess.stop()

    def test_my_fun(self):
        self.mock_subprocess.check_output = mock.Mock(
            side_effect=subprocess.CalledProcessError(0, "hi", "no"))
        with self.assertRaises(subprocess.CalledProcessError):
            out = self.my_stuff.my_fun()

if __name__ == '__main__':
    unittest.main()
<NonCallableMagicMock name='subprocess' spec='module' id='140654009377872'>
.
----------------------------------------------------------------------
Ran 1 test in 0.007s

OK