我有一个函数有try/除了如下:
def func_A():
try:
# do some stuff
except Exception as e:
log.error("there was an exception %s", str(e))
我想为这个写一个单元测试func_A()
更重要的是,我想确保
我有try/except
只是为了安全。
除非有一个bug,否则不应该在a中抛出异常(尽管它将被try/except
捕获),这就是我想用单元测试验证的。
单元测试捕获抛出并捕获异常的情况的最佳方法是什么?
如果您真的需要这个,一种可能的方法是模拟
log.error
对象。在调用func_A
函数之后,您可以断言您的mock没有被调用。请注意,如果不打算实际处理异常,则根本不应该捕捉异常。为了获得正确的测试覆盖率,您应该在这里提供两个测试—一个测试检查try/except的每个分支。
另一种可能的解决方案是将实现分为两个功能:
foo()
带有不带try语句的逻辑。这样您就可以确保实现中没有抛出异常。safe_foo()
将foo()
包装到try语句中。然后,您可以模拟foo()
来模拟由它引发异常,并确保捕获到每个异常。缺点是
foo()
将是公共接口的一部分,或者您将为私有函数编写测试。您可以有一个变量来跟踪正确执行的函数或以异常结束的函数。
使用
assertTrue
验证function_state
。相关问题 更多 >
编程相关推荐