在Python 3.6中使用不带self的assertRaises

2024-09-30 14:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的一个python文件中测试一个失败场景,如下所示:

source.py

def myfunc():
     a()

关联测试.py

def testMyFuncException():
     a = Mock()
     a.side_effect = MyError
     with self.assertRaises(MyError) as _ : <--- THIS LINE I CANNOT USE self.assertRaises
       ..

但这里我不能使用self,因为它与任何类都没有关联。所以我没有得到任何关于如何做到这一点的线索

编辑

根据建议,我现在做了如下工作:

def testMyFuncException(TestCase):
     a = Mock()
     a.side_effect = MyError
     with TestCase.assertRaises(MyError) as _ :
     ...

现在我得到的错误如下:

E       fixture 'TestCase' not found

Tags: 文件pyselfsourcedefaswith场景
2条回答

unittest测试框架中需要一个TestCase夹具。通常的方法是创建一个从unittest.TestCase继承的类。然后,您将能够使用self.assertRaises方法,以及TestCase类中的其他断言:

from unittest import TestCase
from unittest.mock import Mock

class TestMyFunc(TestCase):
    def test_myfunc_exception(self):
        a = Mock()
        a.side_effect = MyError
        with self.assertRaises(MyError) as _ :
        ...

另一种可能是使用pytest而不是unittest。在这种情况下,您不需要单独的测试类:

import pytest
from unittest.mock import Mock

def test_myfunc_exception():
    a = Mock()
    a.side_effect = MyError
    with pytest.raises(MyError, match="my exception message"):
        ...

相关问题 更多 >