python - AssertionError:未引发 ValueError
问题描述
init类异常不会引发由assetRaises() 识别的异常
当我为该类单独创建一个实例时,已正确打印定义的异常
import unittest
class Circle:
def __init__(self, radius):
# Define the initialization method below
self.radius = radius
try :
if radius < 0 or radius > 1000 : raise ValueError
except ValueError :
print("radius must be between 0 and 1000 inclusive")
class TestCircleCreation(unittest.TestCase):
def test_creating_circle_with_negative_radius(self):
# Try Defining a circle 'c' with radius -2.5 and see
# if it raises a ValueError with the message
# "radius must be between 0 and 1000 inclusive"
with self.assertRaises(ValueError) as e:
c = Circle(-2.5)
self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")
给出错误:
AssertionError: ValueError not raised
解决方案
assertRaises
仅测试上下文管理器中是否引发异常。您捕获异常并且不重新引发它,因此单元测试永远不会看到它。
引发异常然后立即捕获它也没有多大意义。而是这样做:
class Circle:
def __init__(self, radius):
# Define the initialization method below
self.radius = radius
if radius < 0 or radius > 1000:
raise ValueError("radius must be between 0 and 1000 inclusive")
推荐阅读
- c++ - 如何使用 c/c++ 获取用户的输入(适用于操作系统)
- php - 在 Nginx 中使用 Nuxt 和 Laravel 设置 Phpmyadmin
- firebase - Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端
- struct - 在 BigQuery 中取消嵌套结构以展平
- sql - 我不断收到“您的数据库连接已重置。任何待处理的事务或会话状态都已丢失。” 在 oracle sql 开发人员中
- python - pygments 在 Textbox tkinter 中突出显示 python 语法
- javascript - 有没有办法在渲染状态之前先获取我的 api 并更新我的空数组状态
- ios - 使用 imagePicker 打开相机时获取 API_CANCEL_TITLE 而不是取消
- logstash - 在 logstash 中索引更新的日志行
- python - Python - 根据最接近的日期匹配和附加列连接两个数据框