如何使用单元测试测试是否引发并捕获了正确的异常?

Mad*_*kul 7 python unit-testing exception python-unittest

我想测试是否使用unittest.

下面是我的示例代码:

def foo():
    try:
        raise Exception(ValueError)
    except ValueError:
        print "raised"
Run Code Online (Sandbox Code Playgroud)

这是我想做的事情:

self.assertRaises(ValueError, foo)
Run Code Online (Sandbox Code Playgroud)

由于我捕获了异常,因此我无法assertRaise处理异常。我错过了什么还是有其他方法?

我的完整代码:

#!/usr/bin/python
import unittest
def foo():
    try:
        raise ValueError
    except ValueError, e:
        print "caught"
class tester(unittest.TestCase):
    def test1(self):
        with self.assertRaises(ValueError):
            foo()
    def test2(self):
        self.assertRaises(ValueError, foo)
if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

Cyr*_*bil 3

您可以捕获stdout并测试字符串匹配。Pytest为此提供了一个固定装置。

#!/usr/bin/python
import unittest

def foo():
    try:
        raise ValueError
    except ValueError, e:
        print "caught"

def test_foo(capfd):
    foo()
    out, err = capfd.readouterr()
    assert out == "caught\n"
Run Code Online (Sandbox Code Playgroud)

py.test 测试.py

============================= test session starts ==============================
platform linux2 -- Python 2.7.9 -- py-1.4.28 -- pytest-2.7.1
rootdir: /tmp, inifile: 
collected 1 items 

test.py .

=========================== 1 passed in 0.01 seconds ===========================
Run Code Online (Sandbox Code Playgroud)