python中的unittest中未捕获AssertError try except子句

python中的unittest中未捕获AssertError try except子句,python,unit-testing,try-except,Python,Unit Testing,Try Except,我在测试用例中创建了一个对象,并希望在其方法内部进行测试。 但特例被try-except子句吞没了。 我知道我可以在run中更改并引发异常,但这不是我想要的。有没有任何unittest工具可以处理这个问题 看来unittest.TestCase的assertTrue方法只是一个微不足道的assert子句 类TestDemo(unittest.TestCase): def测试_a(自身): 测试用例=self 类NestedProc: def方法1(自身): 打印(“显示方法正在运行的标志”) 测

我在测试用例中创建了一个对象,并希望在其方法内部进行测试。 但特例被try-except子句吞没了。 我知道我可以在
run
中更改并引发异常,但这不是我想要的。有没有任何unittest工具可以处理这个问题

看来
unittest.TestCase
assertTrue
方法只是一个微不足道的assert子句

类TestDemo(unittest.TestCase):
def测试_a(自身):
测试用例=self
类NestedProc:
def方法1(自身):
打印(“显示方法正在运行的标志”)
测试用例assertTrue(False)
def运行(自):
尝试:
self.method1()
除:
pass#可以在这里提出例外,但不是我想要的。
NestedProc().run()#未引发异常
#NestedProc().method1()#引发异常

编辑

为了清楚起见,我将我的真实世界测试用例粘贴在这里。这里最棘手的事情是
ParentProcess
总是会成功,导致
AssertError
无法正确传播到测试函数

类TestProcess(unittest.TestCase);
@pytest.mark.asyncio
异步def测试\进程\堆栈\多个(自):
"""
运行多个嵌套进程以确保进程堆栈始终正确
"""
expect_true=[]
def测试(过程):
expect\u true.append(process==process.current())
类堆栈测试(plumpy.Process):
def运行(自):
#TODO:这里的意外行为
#如果此处发生断言错误,则不引发
#它将由进程中的try except子句处理
#有没有更好的方法来处理这个问题?
expect\u true.append(self==Process.current())
测试单元嵌套(自)
类ParentProcess(plumpy.Process):
def运行(自):
expect\u true.append(self==Process.current())
proc=StackTest()
#启动内部流程
asyncio.Survey_future(过程步骤直到_终止())
to_run=[]
对于范围内的uu(100):
proc=ParentProcess()
to_run.append(proc)
等待asyncio.gather(*[p.step_直到p in的_terminated()运行])
对于要运行的进程:
self.assertEqual(plumpy.ProcessState.FINISHED,proc.state)
对于expect\u true中的res:
self.assertTrue(res)

任何
assert*
方法,甚至
fail()
都会引发异常。最简单的方法可能是手动设置标志,然后
fail()

def test_a(self):
    success = True

    class NestedProc:
       def method1(self):
           nonlocal success
           success = False
           raise Exception()

       ...

    NestedProc().run()

    if not success:
        self.fail()

是的,所有的
assert*
方法都会引发一个
AssertionError
,可以捕获该错误。也许你想让测试直接进行
.fail()
。正如@deceze所说,添加一个
异常断言错误来捕获它,然后
失败()
。永远不要使用一个简单的except子句。但是在我的代码库中,类很复杂,异常被处理并返回到其他进程。我只想在单元测试中提出一个例外。太好了!这就是我要找的。然而,我的真实情况有点复杂(如我编辑的问题所示)。我想知道unittest是否提供了任何内置方法,或者其他测试工具是否可以直接将异常抛出到最外层的测试函数。不管怎样,旗子的方式折衷地解决了我的问题。