Python单元测试函数,包含try/excep

2024-05-13 08:19:03 发布

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

我有一个函数有try/除了如下:

def func_A():
  try:
       # do some stuff
  except Exception as e:
     log.error("there was an exception %s", str(e))

我想为这个写一个单元测试func_A() 更重要的是,我想确保

  • 在A中未捕获到异常

我有try/except只是为了安全。 除非有一个bug,否则不应该在a中抛出异常(尽管它将被try/except捕获),这就是我想用单元测试验证的。

单元测试捕获抛出并捕获异常的情况的最佳方法是什么?


Tags: 函数logdefasexceptionerrorsome单元测试
3条回答

如果您真的需要这个,一种可能的方法是模拟log.error对象。在调用func_A函数之后,您可以断言您的mock没有被调用。

请注意,如果不打算实际处理异常,则根本不应该捕捉异常。为了获得正确的测试覆盖率,您应该在这里提供两个测试—一个测试检查try/except的每个分支。

另一种可能的解决方案是将实现分为两个功能:

  1. 函数foo()带有不带try语句的逻辑。这样您就可以确保实现中没有抛出异常。
  2. safe_foo()foo()包装到try语句中。然后,您可以模拟foo()来模拟由它引发异常,并确保捕获到每个异常。

缺点是foo()将是公共接口的一部分,或者您将为私有函数编写测试。

您可以有一个变量来跟踪正确执行的函数或以异常结束的函数。

def func_A():
  function_state = True 
  try:
       # do some stuff
  except Exception as e:
     log.error("there was an exception %s", str(e))
     function_state = False
return function_state

使用assertTrue验证function_state

相关问题 更多 >